Corentin Wallez
aa43d162ec
Vulkan: Implement texture creation.
...
This commit only implements the creation and destruction of VkImage as
well as the allocation and freeing of its memory.
2018-01-08 04:07:41 -08:00
Corentin Wallez
f11396767f
Make nxt::TextureBase::GetDevice const
...
Because it is.
2018-01-08 04:07:41 -08:00
Corentin Wallez
160abad592
Vulkan: Implement buffer transitions
2017-12-12 12:31:20 -05:00
Corentin Wallez
77a1d908b6
Vulkan: Handle CopyBufferToBuffer commands
...
This as this is the first command handled by the Vulkan backend, this
commit also introduces the b:✌️ :CommandBUffer class and implements
b:✌️ :Queue::Submit.
Also enables the BufferSetSubData tests that are now passing on Vulkan
even though the buffer transitions are unimplemented.
2017-12-12 12:31:20 -05:00
Corentin Wallez
a9b98af710
Vulkan: Centralized deferred deletion, use it for BufferVk's handle
...
This introduce a new FencedDeleter service as part of the Device
objects that tracks when resources are no longer used and deletes them.
BufferVk takes advantage of this to defer the deletion of its handle
that was previously incorrectly delete directly in ~BufferVk.
2017-12-12 12:31:20 -05:00
Corentin Wallez
c34aa3abe7
Vulkan: Make non-dispatchable handles always opaque
...
On 32 bit Vulkan typedefs these handles to uint64_t which breaks
function overload resolution. Replace the
VK_DEFINE_NON_DISPATCHABLE_HANDLE and VK_NULL_HANDLE defines to be
opaque C++ types with the same capabilities.
2017-12-12 12:31:20 -05:00
Corentin Wallez
00935daffc
Use shaderc_shared and don't build unnecessary targets
...
This should speed up compilation on Travis a little bit.
2017-12-12 01:02:35 -05:00
Corentin Wallez
b6fb5f3149
Roll shaderc
2017-12-12 01:02:35 -05:00
Corentin Wallez
b36b501f5e
Build the Vulkan backend on CI
2017-12-04 21:39:16 -05:00
Corentin Wallez
23b27a27e2
Format: src/backend/vulkan
2017-11-28 16:18:39 -05:00
Corentin Wallez
c7807abf04
Format: src/backend/opengl
2017-11-28 16:18:39 -05:00
Corentin Wallez
1aa4d5604f
Format: src/backend/null
2017-11-28 16:18:39 -05:00
Corentin Wallez
f58d84d488
Format: src/backend/metal
2017-11-28 16:18:39 -05:00
Corentin Wallez
2d62a371ee
Format: src/backend/d3d12
2017-11-28 16:18:39 -05:00
Corentin Wallez
c1400f0d14
Format: src/backend
2017-11-28 16:18:39 -05:00
Corentin Wallez
9d01c6c26d
Format: src/{common, utils, wire}
2017-11-28 16:18:39 -05:00
Corentin Wallez
d5d77af5b6
Member rename: src/tests
2017-11-23 17:04:10 -05:00
Corentin Wallez
ad6470466c
Member rename: src/{common/utils/wire}
2017-11-23 17:04:10 -05:00
Corentin Wallez
8d75e5b4ae
Member rename: src/backend/vulkan
2017-11-23 17:04:10 -05:00
Corentin Wallez
7ee1610f38
Member rename: src/backend/opengl
2017-11-23 17:04:10 -05:00
Corentin Wallez
b0c75a5b68
Member rename: src/backend/metal
2017-11-23 17:04:10 -05:00
Corentin Wallez
e00385af73
Member rename: src/backend/d3d12
2017-11-23 17:04:10 -05:00
Corentin Wallez
903c563b43
Member rename: src/backend/null
2017-11-23 17:04:10 -05:00
Corentin Wallez
fbecc28ac4
Member rename: src/backend
2017-11-23 17:04:10 -05:00
Corentin Wallez
b325f4d0af
Fix compilation of Vulkan backend on Windows
2017-11-23 17:04:10 -05:00
Corentin Wallez
98013d7866
Enable first tests on Vulkan!
2017-11-23 09:26:26 -05:00
Corentin Wallez
bdde209ed9
VulkanBinding: make a dummy Vulkan swapchain impl
2017-11-23 09:26:26 -05:00
Corentin Wallez
eee5171c39
Vulkan: Add uploader for BufferSetSubData
2017-11-23 09:26:26 -05:00
Corentin Wallez
a8ec80ba57
Vulkan: Add some simple command pool / buffer management
2017-11-23 09:26:26 -05:00
Corentin Wallez
9018236b38
Vulkan: Keep track of finished operations with fences
2017-11-23 09:26:26 -05:00
Corentin Wallez
315e9268bb
Vulkan: Start buffers, hack SetSubData and MapRead
2017-11-22 18:25:20 -05:00
Corentin Wallez
b8387a62a6
RefCounted: make copy constructor arg const
2017-11-22 18:25:20 -05:00
Corentin Wallez
0216233a83
Vulkan: Create device and load all entry points
2017-11-22 18:25:20 -05:00
Corentin Wallez
f40d8c545c
Fix warnings in IndexFormatTests
2017-11-21 17:34:16 -05:00
Corentin Wallez
33f7bfe322
OpenGL: Apply vertex/index buffers just before draw.
...
Previously we would modify the GL state as soon as we saw
SetIndex/VertexBuffers. This GL state is owned by the VAOs in the
InputState and was disappearing on a Pipeline change. Fix this by
applying the index / vertex buffers lazily.
2017-11-21 17:34:16 -05:00
Corentin Wallez
6d9a3b82c6
Vulkan: Create VkInstance and register debug report
2017-11-21 16:09:15 -05:00
Corentin Wallez
f2adf6d5bd
Vulkan: Load Vulkan library and gather global info
2017-11-21 16:09:15 -05:00
Corentin Wallez
86e1ca2230
Add a DynamicLib loading class
2017-11-21 16:09:15 -05:00
Corentin Wallez
2eb113d690
Noop d3d12_platform.h cleanup
2017-11-21 16:09:15 -05:00
Corentin Wallez
6225a72fb7
Add index format tests.
2017-11-20 09:59:03 -05:00
Corentin Wallez
a43b1566e6
Make MetalBackend require BGRA8 swapchain
2017-11-20 09:59:03 -05:00
Corentin Wallez
e862a33dac
Add TextureFormat::B8G8R8A8Unorm
2017-11-20 09:59:03 -05:00
Corentin Wallez
2e31e8f0bf
Make binding expose the preferred format
2017-11-20 09:59:03 -05:00
Corentin Wallez
405dcd636a
Make the index format part of the pipeline state.
2017-11-20 09:59:03 -05:00
Corentin Wallez
ff57ccbcf1
OpenGL: Fix rendered textures being flipped.
...
This was because the clip space of OpenGL has an inverted Y compared to
other APIs. This commit:
- Updates SPIRV-Cross to the latest version
- Uses the new vertex.flip_vert_y option in ShaderModuleGL
- Enables tests that are now passing in GL.
2017-11-16 11:42:38 -05:00
Kai Ninomiya
921fb5e1ce
remove initialUsage from SwapChain::Configure
2017-09-15 14:02:02 -07:00
Kai Ninomiya
169809c458
use TransitionUsageImpl
2017-09-15 14:02:02 -07:00
Kai Ninomiya
720a5d9366
d3d12: add implicit transition for subpass attachments
2017-09-15 14:02:02 -07:00
Kai Ninomiya
ee7b6b1b62
Update SwapChain to configure texture usage
...
Explicitly configure swap chain usage in bindings and examples
Fix missing case in switch
Make swap chain Present usage implicit
Author: Austin Eng <enga@google.com>
2017-09-15 14:02:02 -07:00
Kai Ninomiya
08a0081c13
Change SetPipelineCommon to return void ( #124 )
...
This is to avoid a potential future problem if SetPipelineCommon were to
ever return false (which is currently not possible), some state might
have been modified incorrectly.
2017-08-31 10:56:15 -07:00
Kai Ninomiya
da42198478
Remove the last few null=backbuffer hacks ( #125 )
...
I missed these in #94 .
2017-08-31 10:47:54 -07:00
Corentin Wallez
916046c956
Add stub Vulkan backend
2017-08-29 13:37:24 -07:00
Corentin Wallez
7218ed19a1
end2end: Add push constant tests
2017-08-23 09:49:35 -04:00
Corentin Wallez
ab4aa2af3e
NXTTest: Configure the swapchain
...
Otherwise when trying to use SwapBuffersForCapture a device error is
generated.
2017-08-23 09:49:35 -04:00
Corentin Wallez
9a72ea09a9
Metal: Recreate the compiler everytime we use it.
2017-08-23 09:49:35 -04:00
Corentin Wallez
2f96e129ef
Metal: Fix SetBindGroup assert
2017-08-23 09:49:35 -04:00
Corentin Wallez
91b475f369
OpenGL: Allow separate VS and FS push constants
2017-08-23 09:49:35 -04:00
Corentin Wallez
1b6f7535aa
OpenGL: Reset viewport to FB size at each subpass
2017-08-23 09:49:35 -04:00
Corentin Wallez
a214b7f12d
OpenGL: Fix push constants disappearing on pipeline change
2017-08-23 09:49:35 -04:00
Corentin Wallez
3ef4121d4e
Metal: Free pipeline descriptor on error.
2017-08-23 09:49:35 -04:00
Corentin Wallez
8846433ae7
end2end: Clear attachments in tests
2017-08-23 09:49:35 -04:00
Corentin Wallez
770f25f335
Fix XCode Analyse false positive
2017-08-23 09:49:35 -04:00
Austin Eng
a384c61f7a
Fix indexing error
2017-08-18 12:49:45 -04:00
Austin Eng
4086effec0
Validate buffer view offset on bind groups
2017-08-17 15:36:02 -04:00
Austin Eng
ae48c95306
Add IsAligned helper for values
2017-08-17 15:36:02 -04:00
Austin Eng
d37ec9af92
unittests: Test inheritance of vertex inputs between pipelines and no inheritance between subpasses
2017-08-15 19:40:10 -04:00
Austin Eng
9b4150d5fd
Fix RecomputeHaveAspectVertexBuffers check
2017-08-15 19:40:10 -04:00
Austin Eng
dd37e5017f
Fix bug with EnsureTextureUsage
2017-08-15 19:40:10 -04:00
Austin Eng
d9568e2ca9
Reset vertex buffers aspect when pipelines change and fix bug where inputsSet is not cleared
2017-08-15 19:40:10 -04:00
Kai Ninomiya
b476abd915
RenderPassLoadOpTests.ClearsOnlyOnFirstUsePerRenderPass ( #117 )
...
Tests that an attachment is cleared only on the first subpass that uses
it in a renderpass
2017-08-15 13:58:48 -07:00
Kai Ninomiya
afa45a9176
Add tests for clears, render passes, framebuffers ( #107 )
...
* Add tests for clears, render passes, framebuffers
* Test load with a draw in it
2017-08-14 16:32:26 -07:00
Austin Eng
37d11539a4
Add compute to D3D12 backend
2017-08-14 17:39:36 -04:00
Austin Eng
fb19c3606b
Add RGBA8Uint texture format
2017-08-14 17:38:56 -04:00
Kai Ninomiya
ba7a3224ea
fix accidentally lost from #105 ( #109 )
2017-08-11 18:06:25 -07:00
Kai Ninomiya
b985431c82
Load operations ( #105 )
...
* load ops: design + implementation (all backends)
* Animometer/glTFViewer: use just one subpass per frame
2017-08-11 14:36:20 -07:00
Austin Eng
e69a2893b3
Add BlendState validation tests
2017-08-07 18:51:48 -04:00
Austin Eng
12a00ba3d1
Reset blend color to (0,0,0,0) at the start of render subpass
2017-08-07 18:51:48 -04:00
Austin Eng
cce6b01b6d
Remove dual source blending
...
It is not supported on many mobile GPUS on Vulkan
http://vulkan.gpuinfo.org/listreports.php?feature=dualSrcBlend&option=not
and is optional on Metal
2017-08-07 18:51:48 -04:00
Austin Eng
6366a019db
Validate render subpass for SetBlendColor and SetStencilReference
2017-08-07 18:51:48 -04:00
Austin Eng
3a8f48504d
opengl: Fix multiple render target setup with glDrawBuffers
2017-08-07 18:51:48 -04:00
Austin Eng
8dc3bd1808
opengl: Implement blend state
2017-08-07 18:51:48 -04:00
Austin Eng
18163f1223
end2end: Add blend state tests
2017-08-07 18:51:48 -04:00
Austin Eng
fb4265387c
Add SetBlendColor command
2017-08-07 18:51:48 -04:00
Austin Eng
476e5cbe30
Metal: Apply BlendState to RenderPipeline
2017-08-07 18:51:48 -04:00
Austin Eng
4820dbd7ee
D3D12: Apply blend state to render pipeline
2017-08-07 18:51:48 -04:00
Austin Eng
31fc0d234c
D3D12 & Metal: Blend state conversions
2017-08-07 18:51:48 -04:00
Austin Eng
94bebe517d
Add BlendState to NXT API
2017-08-07 18:51:48 -04:00
Ben Constable
2c05f4d8fc
Remove comment per code review feedback
2017-08-01 18:45:33 -04:00
Ben Constable
ea507ddf77
Code review feedback
2017-08-01 18:45:33 -04:00
Ben Constable
d54a5239a6
Fix missing depth stencil format and reference value setting
2017-08-01 18:45:33 -04:00
Ben Constable
a015ad3399
Initial changes for depth stencil, some tests not passing
2017-08-01 18:45:33 -04:00
Kai Ninomiya
4526368263
Remove outdated backbuffer hack + reduce GL version to 4.4 ( #100 )
2017-07-31 11:25:06 -07:00
Corentin Wallez
4122b2e3f9
Metal: Implement push constants
2017-07-28 17:11:07 -04:00
Corentin Wallez
30beb65a7b
Metal: Make the MSL indices match the ones of PipelineLayout
...
Previously didn't tell SPIRV-Cross at which MSL resource indices the
different SPIRV binding should be, and were lucky that it's giving
indices in increasing order matched the PipelineLayout in all our
samples.
Fix this by making SPIRV->MSL compilation depend on the PipelineLayout
so we can tell SPIRV-Cross which binding goes where.
We should do the same for vertex attributes eventually as they are
hardcoded to start at kMaxBindingsPerGroup currently.
Also a couple unrelated cleanups (unused function, usage of
IterateBitSet).
2017-07-28 17:11:07 -04:00
Kai Ninomiya
c16a67ae52
Swap chains, part 2 ( #94 )
2017-07-27 18:30:57 -07:00
Corentin Wallez
3818e18c5c
Forward unhandled builder errors to the device
2017-07-27 21:08:12 -04:00
Austin Eng
ba6a36c974
D3D12: Enable better live object reporting and cleanup resources on device destruction
2017-07-27 15:15:28 -04:00
Austin Eng
439d963ccd
Point,Line,Triangle -> PointList,LineList,TriangleList
2017-07-27 10:19:30 -04:00
Austin Eng
c2def461a1
Add input primitive topology to D3D12 and Metal pipeline states
2017-07-27 10:19:30 -04:00
Austin Eng
2a0792b5f0
Add RenderPipeline validation tests
2017-07-27 10:19:30 -04:00
Austin Eng
d568bdad99
Add primitive topology tests
2017-07-27 10:19:30 -04:00
Austin Eng
d81fd82bde
Implement primitive topology in OpenGL, Metal, and D3D12 backends
2017-07-27 10:19:30 -04:00
Austin Eng
3e9e315636
Add primitive topology to NXT API
2017-07-27 10:19:30 -04:00
Austin Eng
c275f7cf9f
end2end: Add depth stencil state tests
2017-07-25 10:16:08 -04:00
Austin Eng
ccf1fa2330
Remove DepthTestEnabled() and fix depth writes for depth function Always
2017-07-25 10:16:08 -04:00
Austin Eng
cc8d2d529d
D3D12: Enabled copy tests with non-aligned buffer offsets
2017-07-25 09:40:54 -04:00
Austin Eng
04499576d9
D3D12: Add copy splitter unit tests
2017-07-25 09:40:54 -04:00
Austin Eng
0506138567
D3D12: Add copy splitting for texture copies not 512-byte aligned
2017-07-25 09:40:54 -04:00
Kai Ninomiya
78c8b837ea
clang/gcc: enable a bunch more warnings ( #91 )
...
* clang/gcc: enable -pedantic warnings
* suppress a GCC-specific warning in stb_image
* And some clang-specific warnings
* -Wconversion (clang) -Wold-style-cast (clang+gcc)
and fix a few warnings that show up with these (and a few more with
-Wconversion on gcc, even though that's not enabled by default)
* bunch more warnings
* fixes
* remove merge error
2017-07-21 17:00:22 -07:00
Kai Ninomiya
159bade5f5
x_DISABLED -> DISABLED_x
2017-07-20 16:33:02 -04:00
Kai Ninomiya
d9af452ceb
refactorign -> refactoring
2017-07-20 16:33:02 -04:00
Corentin Wallez
a18200e6af
unittests: Add tests for push constants
2017-07-20 16:33:02 -04:00
Corentin Wallez
86b2894103
ShaderModule: Validate the push_constant block size
2017-07-20 16:33:02 -04:00
Corentin Wallez
c8377da79b
Validate SetPushConstants is done inside subpass and compute passes
2017-07-20 16:33:02 -04:00
Corentin Wallez
2dfea9961a
ValidationTest: Add helper to create a dummy renderpass
2017-07-20 16:33:02 -04:00
Austin Eng
b343e8d920
Add texture copy tests
2017-07-20 13:07:36 -04:00
Austin Eng
e5bd3e0ece
Add Texture expectation macro and mip level parameter
2017-07-20 13:07:36 -04:00
Austin Eng
1b8c64d3e2
Print small buffers on test expectation failure
2017-07-20 13:07:36 -04:00
Austin Eng
4234c39a09
Add output string streams to NXT test expectation helpers
2017-07-20 13:07:36 -04:00
Kai Ninomiya
59dc03f101
Correctly configure NXT_ENABLE_ASSERTS on multiconfiguration generators ( #88 )
...
And also set a default build type for single-configuration generators
2017-07-20 07:28:00 -07:00
Kai Ninomiya
35bf424035
Swap chains, part 1 ( #87 )
...
Adds the swap chain interfaces to the API without changing the behavior
of anything else. This includes the C APIs for applications to provide
swap chain implementations. Also adds stub implementations on every
backend.
2017-07-19 15:41:17 -07:00
Corentin Wallez
1e66ab93fe
end2end: Add BufferSetSubData tests
...
The test doing many small SetSubData freezes the Metal driver on a
MTLBuffer allocation. This is because we don't use a ringbuffer for
SetSubData and instead create one small upload buffer per call.
The same test is skipped on D3D12 as it is bound to have the same issue.
Also adds comments that were forgotten before every MapReadAsync test.
2017-07-18 17:24:54 -04:00
Corentin Wallez
e1f16a25bf
NXTTest: add other Is<Backend> methods
2017-07-18 17:24:54 -04:00
Austin Eng
3835edde10
Add validation for buffer offset
2017-07-18 16:03:51 -04:00
Corentin Wallez
8668fbacdd
end2end: Add BufferMapReadAsync tests
2017-07-18 11:06:54 -04:00
Corentin Wallez
ea1241af80
D3D12: Handle MapReadAsync offset
2017-07-18 11:06:54 -04:00
Corentin Wallez
d8e1a25cbc
Metal: Wait for GPU on device destruction
2017-07-18 11:06:54 -04:00
Corentin Wallez
134e08005a
Move USleep to utils/
2017-07-18 11:06:54 -04:00
Austin Eng
2fbda87caf
D3D12: Enable PureInstance test
2017-07-17 17:16:45 -04:00
Austin Eng
33560ef015
Implement backend texture->buffer and buffer->texture copies with row pitch
2017-07-17 17:16:45 -04:00
Austin Eng
51ff013ee2
Add automatic readback alignment and packing for texture expectations
...
Texture expectations copy into a buffer with a 256-byte aligned row
pitch. Then, the rows are packed into an array to check expectations
against.
2017-07-17 17:16:45 -04:00
Austin Eng
36d82645c3
Add row pitch validation tests
2017-07-17 17:16:45 -04:00
Austin Eng
5ed02ee648
update existing unit tests with proper row pitch
2017-07-17 17:16:45 -04:00
Austin Eng
972a1e59a7
Update tests and examples to follow copy row pitch alignment constraints
2017-07-17 17:16:45 -04:00
Austin Eng
3f47729df6
Add row pitch validation and default computation
2017-07-17 17:16:45 -04:00
Austin Eng
c5f8e7ae77
Update usage of CopyBufferToTexture and CopyTextureToBuffer to include row pitch
2017-07-17 17:16:45 -04:00
Austin Eng
359acd6e95
Add row pitch to Texture->Buffer and Buffer->Texture copy commands
2017-07-17 17:16:45 -04:00
Austin Eng
c100ca7b3f
Update BufferD3D12 to use Align helper
2017-07-17 17:16:45 -04:00
Austin Eng
deba8a4ea6
Add value type Align tests
2017-07-17 17:16:45 -04:00
Austin Eng
98b781527f
Add kTextureRowPitchAlignment and Align helper
2017-07-17 17:16:45 -04:00
Austin Eng
8867e5d8df
Rename Align to AlignPtr
2017-07-17 17:16:45 -04:00
Corentin Wallez
0bcf0e8e74
Factor computation of inherited bindgroups in PipelineLayoutBase
2017-07-17 15:25:16 -04:00
Corentin Wallez
136cae5ee2
Split Pipeline in Render and Compute, D3D12 part
2017-07-17 15:25:16 -04:00
Corentin Wallez
b085eecb31
Split Pipeline in Render and Compute, OpenGL part
2017-07-17 15:25:16 -04:00
Corentin Wallez
494a157f66
Split Pipeline in Render and Compute, Metal part
2017-07-17 15:25:16 -04:00
Corentin Wallez
e20c5ee9ff
Split Pipeline in Render and Compute, test part
2017-07-17 15:25:16 -04:00
Corentin Wallez
29ced285d4
Split Pipeline in Render and Compute, common part
2017-07-17 15:25:16 -04:00
Kai Ninomiya
00349e6e36
Default-initialize descriptor heaps to null ( #82 )
2017-07-17 15:14:01 -04:00
Corentin Wallez
55ebc25c0f
NXTTest: Make GTest print the name of the backend
2017-07-17 13:48:17 -04:00
Corentin Wallez
23620b0dc7
OpenGL: Implement T->B copies
...
Also enable the basic end2end tests that are now passing.
InputStateTests isn't passing yet, for some reason the ReadPixels
returns pure black.
2017-07-17 13:48:17 -04:00
Corentin Wallez
0f9f747c8a
OpenGL: implement a synchronous MapReadAsync
...
Mapping OpenGL buffers persistently and unsynchronized isn't supported
on OSX's OpenGL version where we want to run tests.
2017-07-17 13:48:17 -04:00
Corentin Wallez
dab0638177
Fix using NXT_PLATFORM without including Platform.h
2017-07-17 13:48:17 -04:00
Corentin Wallez
9d4b9ab313
OpenGL: move buffer to its own file
2017-07-17 13:48:17 -04:00
Kai Ninomiya
fec8c58a97
Add depth-stencil textures and attachments ( #77 )
...
Related: #29
2017-07-17 12:03:16 -04:00
Corentin Wallez
bcee1e5981
NXTTest: expose SwapBuffers to test to make it easy to RenderDoc
...
RenderDoc uses presents as the points to start and end a capture, so to
debug test we have to do the following:
TEST_F(...)
while(true) {
// All the test code
SwapBuffers();
}
}
2017-07-13 15:41:43 -04:00
Corentin Wallez
11ce310de3
D3D12: make texture transition barrier on all subresources
...
This doesn't fix anything in particular and is just a drive-by
change.
2017-07-13 15:41:43 -04:00
Corentin Wallez
de4a3c4c3b
Fix framebuffer dimensions in InputStateTest
...
Also add validation that the framebuffer size matches its attachement
size and make a test for it.
2017-07-13 15:41:43 -04:00
Corentin Wallez
0b186b1fda
Use feature detection macros everywhere
2017-07-13 14:55:23 -04:00
Corentin Wallez
275817a93a
Add proper defines for backend enablement
2017-07-13 14:55:23 -04:00
Corentin Wallez
a7bfc9d2ac
Metal: Fix Device::pendingCommands being freed under us
2017-07-13 14:55:23 -04:00
Austin Eng
77a29986b0
D3D12 Render Targets ( #72 )
...
Implements BeginRenderSubpass on the D3D12 backend. Descriptors for render target and depth stencil views are recorded in a descriptor heap for each framebuffer. For now, we still have the hack where no attachment renders to the backbuffer, so the CommandBuffer records those when necessary when it is submitted.
This PR also enables input states for D3D12 which are mostly working. One failure seems to be happening because our texture copies are not yet correct.
2017-07-12 17:36:36 -07:00
Kai Ninomiya
e66fcd8b0e
OpenGL backend: implement render passes ( #73 )
...
Probably not the most efficient implementation, but works.
Issues:
* Doesn't seem to render until the second frame. No clue why, yet.
* Hardcoded 640x480 in more places.
* Creates new FBOs for every subpass every frame. Should be done at Framebuffer build or CommandBuffer build time.
2017-07-11 17:49:20 -07:00
Corentin Wallez
0f833f30ed
Enable warnings on Windows
2017-07-11 13:59:15 -04:00
Corentin Wallez
83e779d8f2
Fix all Windows warnings
2017-07-11 13:59:15 -04:00
Corentin Wallez
8fca4a21b7
Use UNREACHABLE in more places
2017-07-11 13:59:15 -04:00
Corentin Wallez
96acaef95e
Fix MSVC warnings on enum class switches
2017-07-11 13:59:15 -04:00
Corentin Wallez
6fb3aebf0c
Better namespace CMake folders for Visual Studio
...
This helps Visual Studio users have less clutter in their solution
explorer. This also updates spirv-tools to a newer version that folders
itself. This also updates spirv-headers so that spirv-tools compiles.
2017-07-11 13:59:15 -04:00
Corentin Wallez
fd589f3919
Add an internal ASSERT macro
...
This macro has some advantages over the standard library one:
- It prints the place where the macro was triggered
- It "references" the condition even in Release to avoid warnings
- In release, if possible, it gives compiler hints
It is basically is stripped down version of the ASSERT macros I wrote
for the Daemon engine in src/common/Assert.h
This commit also removes the stray "backend" namespaces for common/
code.
2017-07-10 19:35:21 -04:00
Corentin Wallez
bd0594bab8
Enable warnings on non-MSVC
2017-07-10 19:35:21 -04:00
Corentin Wallez
228ba88fe6
Remove unused Device::CopyBindGroup
2017-07-10 19:35:21 -04:00
Corentin Wallez
98c90d4faa
Fix clang/GCC warnings
2017-07-10 19:35:21 -04:00
Corentin Wallez
a52c23c553
Make one missed #include start from src/
2017-07-10 19:35:21 -04:00
Corentin Wallez
98614a02d3
Fix EnsureTextureUsage not using usage
2017-07-10 19:35:21 -04:00
Kai Ninomiya
296951df60
Introduce Begin/EndComputePass ( #70 )
2017-07-10 14:07:24 -07:00
Austin Eng
afdcf7d828
D3D12: Wait for GPU on device destruction
2017-07-10 16:45:28 -04:00
Austin Eng
f9c39d021e
Add device reference counting
2017-07-10 16:45:28 -04:00
Kai Ninomiya
563e9e253e
Remove prints added in #67 and fix test broken in #64 ( #69 )
2017-07-10 10:23:27 -07:00
Kai Ninomiya
cb2d6d8553
Freeze texture transitions while attached; consolidate OutputAttachment usage ( #67 )
...
* lock usages for attachments during subpasses
* refactor IsTextureTransitionPossible
* change attachment usages to OutputAttachment
* make SetBindGroup validation lazier
2017-07-07 16:06:14 -07:00
Kai Ninomiya
794d4faece
null backend: fix resource usage after cmdbuf transition ( #63 )
...
and test it.
2017-07-07 11:47:40 -07:00
Kai Ninomiya
fa37f2239c
replace AdvanceSubpass with Begin/EndRenderSubpass
...
and replace subpassActive with VALIDATION_ASPECT_RENDER_SUBPASS
2017-07-07 11:19:42 -04:00
Corentin Wallez
fffe6dfa16
Split backend/common in backend/ and common/
...
This directory used to contain both the state tracking code for the
backends, and the common utilities that could be used both by the
backends and the rest of the code. Things are now:
- src/common is utility code for the whole repo
- src/backend contains libNXT's code
- src/utils is utility code that we don't want in libNXT
This commit also changes all includes to use global paths from src/
bacause it had to touch a bunch of #include statements anyway.
2017-07-06 17:54:52 -04:00
Austin Eng
a9b2a9871c
Add Buffer->Texture->Buffer copy test
...
This does a Buffer->Buffer copy using a Texture as an intermediate
resource and checks if the resulting buffer data is the same
2017-07-06 16:57:54 -04:00
Austin Eng
49fe566d05
Add Buffer range expectation
2017-07-06 16:57:54 -04:00
Austin Eng
4502441604
Enable basic tests for D3D12
2017-07-06 16:57:54 -04:00
Austin Eng
47261d4ecb
Implement MapReadAsync on D3D12 backend
...
Buffers with MapRead allowed are created on the READBACK heap and always
add the D3D12_RESOURCE_STATE_COPY_DEST state (required by D3D12).
Likewise MapWrite adds the D3D12_RESOURCE_STATE_GENERIC_READ state and
places resources on the UPLOAD heap. Because these states are
required, transitions for mapped buffers do nothing.
2017-07-06 16:57:54 -04:00
Austin Eng
8fa550c015
Add D3D12 buffer/buffer buffer/texture and texture/buffer copies
...
Right now, this only works if textures are 256-byte aligned
2017-07-06 16:57:54 -04:00
Austin Eng
6774bce06e
Remove unused Device member in D3D12 TextureView and BufferView
2017-07-06 16:57:54 -04:00
Austin Eng
beb76d06db
Rename d3d12 Device tick functions to Tick
2017-07-06 16:57:54 -04:00
Austin Eng
6103c62489
Rename backend::d3d12::ResourceUploader::UploadToBuffer to BufferSubData
2017-07-06 16:57:54 -04:00
Corentin Wallez
5e03aec75a
Remove some unused variables
2017-07-06 16:30:20 -04:00
Corentin Wallez
2dd73fbc1d
Remove unnecessary Device forwarding.
2017-07-06 16:30:20 -04:00
Corentin Wallez
59d55dc3ac
unittests: Add validation tests for InputState.
2017-07-06 11:34:31 -04:00
Corentin Wallez
0230a8dea0
end2end: Add InputStateTests
...
They test aspects of the input state but don't try all combinations of
formats like dEQP would do.
2017-07-06 11:34:31 -04:00
Corentin Wallez
8308b1c1b3
Metal: Don't hardcode the texture usage or dimension
2017-07-06 11:34:31 -04:00
Corentin Wallez
c6f9006b02
Metal: Use RGBA instead of BGRA and clear render targets by default
...
This makes rendering of the samples have the wrong colors on the Metal
backend, but using BGRA made end2end tests fail. The rendering color
will be fixed when the WSI is introduced.
2017-07-06 11:34:31 -04:00
Corentin Wallez
8859178703
Add nxt::VertexFormat::FloatR32
2017-07-06 11:34:31 -04:00
Corentin Wallez
4cd65f03b7
Add a readpixel test
2017-07-06 11:34:31 -04:00
Austin Eng
cd13691783
Update SPRIV-Cross for HLSL SM5.1 register name support
2017-07-04 14:30:34 -04:00
Austin Eng
036f76f51f
D3D12: Refactor bind group descriptor tracking and descriptor heap allocation
...
Extract descriptor offset computation and CPU descriptor recording to
BindGroupLayout and BindGroup. Refactor descriptor heap allocation to
copy from a large CPU heap to a GPU heap.
2017-07-04 14:30:34 -04:00
Austin Eng
aecf0b130e
Add D3D12 buffer, texture, and sampler binding
2017-07-04 14:30:34 -04:00
Austin Eng
29477375a6
fix bind group state tracking on pipeline switch
2017-07-04 14:30:34 -04:00
Corentin Wallez
e9d347e89e
Add T->B copies.
...
This implements T->B copies on the Metal backend only and while it adds
validation tests, end2end tests will be done in a follow-up commit.
2017-06-27 13:25:42 -04:00
Corentin Wallez
492cbe4a43
ValidationTests: add B->T copy tests
2017-06-27 13:25:42 -04:00
Corentin Wallez
b6d52b4ad1
Refactor copy validation to add helper functions useful for T->B too.
...
Also fixes validation not taking the mip-level into account when
checking if the copy would fit in the texture.
2017-06-27 13:25:42 -04:00
Corentin Wallez
4b4922cdce
Allow empty B->T copies
...
This adds a test that empty copies are valid for B->B copies too. Tests
for B->T will come in a follow up commit.
2017-06-27 13:25:42 -04:00
Corentin Wallez
eaae746433
Introduce end2end tests.
...
This commit adds a test harness that handles instantiating tests on
multiple backends, and have deferred expectations on the content of
resources.
2017-06-22 09:56:30 -07:00
Corentin Wallez
ef199c0310
Metal: Implement BufferMapRead
2017-06-22 09:56:30 -07:00
Corentin Wallez
6cb33ef24e
Metal: Introduce a proper BufferUploader and PendingCommands
...
Previously the Metal backend used a manual mutex system to make sure the
BufferSetSubData didn't have data races with reads from the GPU. Replace
this with a non-hacky version
- Make the Buffer objects allocated on the GPU
- Make SetSubData use a ResourceUploader that allocates a CPU buffer
and schedules a CPU->GPU copy.
- Have a list of pending commands and a finished command serial to
order operations and track when resource become unused.
2017-06-22 09:56:30 -07:00
Corentin Wallez
0ba5550874
Metal: split non-trivial objects in their own file.
...
No functional changes intended, but there are a couple additional
cleanups:
- Use anonymous namespaces instead of static functions
- Don't store an extra Device pointer in objects
2017-06-22 09:56:30 -07:00
Corentin Wallez
702186e169
Add restrictions on usages allowed with MapRead/Write
2017-06-22 09:56:30 -07:00
Corentin Wallez
76707f9ac9
SerialQueue: add const version of the iterators.
...
Unfortunately you can't template on const-ness in C++ so we have to
duplicate all the iterator code for SerialQueue (that, or introduce very
heavy templating).
2017-06-22 09:56:30 -07:00
Corentin Wallez
e64dec7a3d
Move Serial declaration to Forward.h
...
This is a bit ugly but avoids having to include all of SerialQueue.h
just to get this typedef.
2017-06-22 09:56:30 -07:00
Corentin Wallez
fbf53ac773
Remove SpirvTest
2017-06-20 07:40:17 -07:00
Corentin Wallez
5ee7afdfbe
Split NXT helpers from example/Utils into src/utils
...
This will make it possible to use them in the test suites
2017-06-20 07:40:17 -07:00
Corentin Wallez
1bd219d8a8
Split BackendBinding from example/Utils into src/utils
...
This will make it possible to reuse the backend bindings for test suites
2017-06-20 07:40:17 -07:00
Austin Eng
6aef6833b7
assert vector is nonempty in SerialQueue::Enqueue
2017-06-19 17:32:26 -04:00
Austin Eng
e480a0724c
add test for SerialQueue::FirstSerial
2017-06-19 17:32:26 -04:00
Austin Eng
e44179ae4d
Move command list creation to the Device and indirectly reserve command allocators
2017-06-19 15:08:53 -04:00
Austin Eng
a4dcde9cf3
forward declare allocator classes
2017-06-19 15:08:53 -04:00
Austin Eng
f96ce23628
Add ResourceAllocationManager to create and track lifetimes of d3d12 resources
2017-06-19 15:08:53 -04:00
Austin Eng
78f1619446
Use CommandAllocatorManager to create and track lifetimes of ID3D12CommandAllocators
2017-06-19 15:08:53 -04:00
Austin Eng
2157002570
refactor ResourceUploader to use SerialQueue
2017-06-19 15:08:53 -04:00
Corentin Wallez
38246eb51c
Introduce SerialQueue to track in flight resources
2017-06-15 15:37:48 -07:00
Corentin Wallez
dbb5729e64
Add Device::Tick for periodic work
2017-06-15 13:27:50 -07:00
Austin Eng
b947993e1a
Add d3d12 resource uploader to create and manage uploading resource lifetimes
2017-06-14 13:53:52 -04:00
Austin Eng
d251356783
D3D12 vertex and index buffers with resource transitions
2017-06-14 13:53:52 -04:00
Austin Eng
459537491b
Refactor TransitionUsage to use abstract TransitionUsageImpl
2017-06-14 13:53:52 -04:00
Austin Eng
39c901d3dc
Change usage requirements for Buffer::SetSubData to require TransferDst
...
instead of MapWrite bit
2017-06-14 13:53:52 -04:00
Corentin Wallez
5c92537418
Add validation tests for B2B commands
2017-06-13 13:15:30 -07:00
Corentin Wallez
d84d107076
Add buffer to buffer copies
2017-06-13 13:15:30 -07:00
Corentin Wallez
367cb3515c
Fix MapRead error callback being called with a valid pointer
...
This happened when a request resulted in an error while the buffer was
already mapped. Adds a test that catches the error.
2017-06-13 08:30:01 -07:00
Corentin Wallez
68358b5c23
Add Buffer::MapReadAsync validation tests.
...
This also expands the Buffer validation tests to cover more creation
code paths and SetSubData. It also introduces a mechanism for
ValidationTests to check for device errors.
2017-06-13 08:30:01 -07:00
Corentin Wallez
43bfaae340
Null: implement fake async BufferMapRead
...
We want to test BufferMapRead validation using the null backend. To get
closer to conditions on a real backend, we call the callback only on the
next Queue::Submit. This is because on real backends, we would have to
wait for the GPU to be finished with the buffer, to be sure the correct
data is read.
2017-06-13 08:30:01 -07:00
Corentin Wallez
c863b1c26f
ToBackend: Add support for Device
2017-06-13 08:30:01 -07:00
Corentin Wallez
eca89c2989
WireTests for buffer read mapping
2017-06-13 08:30:01 -07:00
Corentin Wallez
9388b23212
Implement Buffer::MapReadAsync in the wire
2017-06-13 08:30:01 -07:00
Corentin Wallez
b1c19eeb4f
Add Buffer::MapReadAsync state-tracking
2017-06-13 08:30:01 -07:00
Corentin Wallez
f45bdb89c6
Split Mapped usage in MapWrite and MapRead
...
Also make use of CreateFrozenBufferFromData where possible in the
example to make the renaming easier.
2017-06-09 15:26:26 -07:00
Kai Ninomiya
613eee30c3
Add validation for some null arguments and dangling render passes
...
And add tests for both
2017-06-09 12:11:06 -07:00
Austin Eng
2b055c38fd
add fences to prevent resetting a ID3D12CommandAllocator before commands have completed
2017-06-09 07:26:31 -07:00
Austin Eng
81bc3ad23b
move frame resource transitions to D3D12Binding
2017-06-09 07:26:31 -07:00
Kai Ninomiya
468dafde9d
Create a command buffer builder state tracker object ( #19 )
2017-06-08 17:25:57 -07:00
Austin Eng
cfeda4d9f2
CHelloTriangle working
2017-06-07 16:23:10 -04:00
Austin Eng
eb6d22242a
add D3D12Binding with swap chain
2017-06-07 16:23:10 -04:00
Austin Eng
fc2bac7e45
add null D3D12 backend
2017-06-07 16:23:10 -04:00
Corentin Wallez
fbab31bada
Roll spirv-cross bd7c47a0 -> 3ab17000
2017-06-06 10:03:46 -07:00
Corentin Wallez
72725eebf9
CommandBufferGL: Advance iterator for unimplemented commands
2017-06-06 10:03:46 -07:00
Corentin Wallez
ca9af201b5
Fix validation errors in Animometer's shader
2017-06-06 10:03:46 -07:00
Corentin Wallez
4efaf32d1b
Don't check for vertex buffers in dispatch aspects
...
Recently started causing a crash because we stopped creating an empty
InputState for compute pipelines
2017-06-06 10:03:46 -07:00
Corentin Wallez
181e22b482
Rename validation tests to end in Tests
2017-06-06 10:03:46 -07:00
Corentin Wallez
001c2ea98f
Fix some nits from depth-stencil PR
2017-06-05 14:43:06 -07:00
Austin Eng
58c76b3fe4
Simplify PersistentPipelineState and application of stencil states. Fix
...
stencil mask usage. D3D12 does not support separate front/back masks.
All APIs support separate read/write masks.
2017-06-02 12:13:39 -07:00
Austin Eng
00176858b5
Add DepthStencilState validation unit tests
2017-06-02 12:13:39 -07:00
Austin Eng
1063439d5d
Refactor DepthStencilState. TODO: add validation tests
...
- defaults to depth and stencil tests off
- whether or not depth and stencil tests are enabled is inferred from the comparison functions and stencil operations
- only one stencil reference. D3D12 does not support separate references
- change SetDepthWriteMode to SetDepthWriteEnabled and use a bool instead of enum
- Create PersistentPipelineState class for OpenGL backend with simple state tracking
- Add validation so DepthStencilState properties are only set once
- Update API usage in HelloDepthStencil
- refactor tracking of the DepthStencilState in the Metal backend
- validate that compute pipeline does not have a depth stencil state
2017-06-02 12:13:39 -07:00
Austin Eng
f51be34864
Use explicit front and back stencil state.
...
Previously stencil states were stored in array. This commit changes the
DepthStencilState to explicitly store a front and back stencil.
2017-06-02 12:13:39 -07:00
Austin Eng
376f1c6a8e
fix formatting
2017-06-02 12:13:39 -07:00
Austin Eng
084346bd5f
Fix OpenGL stencil clear hack. Improve example stencil reflection
2017-06-02 12:13:39 -07:00
Austin Eng
76e64a985d
Add MTL backend for DepthStencilState. Completely untested.
2017-06-02 12:13:39 -07:00
Austin Eng
4f5521e440
Remove StencilReferenceMode. Add SetStencilReference.
...
This moves the application of the stencil reference from the
DepthStencilState to Command::SetStencilReference
2017-06-02 12:13:39 -07:00
Austin Eng
3efcf2172d
Add DepthStencilState
...
Add depth and stencil tests. This is currently only implemented for the
OpenGL API. HelloDepthStencil is a test using the depth and stencil
buffers to do reflections. Currently clearing / stencil clearing is not
working properly.
2017-06-02 12:13:39 -07:00
Corentin Wallez
b38ff68b88
Make wire_autogen have all symbols defined internally
...
Previously WireCmd.h/cpp that is used in wire_autogen wasn't included in
the sources, causing a link error on some platforms.
With WireCmd.* moved in the EXTRA_SOURCES, the nxt_wire target didn't
contain any non-header file and caused a link error on OSX. Fix it by
properly splitting the declaration and implementation of
TerribleCommandBuffer in a .h and .cpp file.
2017-05-30 15:55:34 -07:00
Corentin Wallez
40fb17dddc
Only include intrin.h on Windows
2017-05-30 15:55:34 -07:00
Corentin Wallez
76dbbd54a0
Use sized integer type for BitSetIterator
...
This makes sure it works correctly with the ScanForward Math type.
However this isn't a very good fix, the right solution would be to
detect whether we are compiling in 32bit or 64bit and use one of
ScanForward32 or ScanForward64.
2017-05-30 15:55:34 -07:00
Corentin Wallez
7815d78044
Fix RefCountedTest not initializing deleted.
2017-05-30 10:48:32 -07:00
Corentin Wallez
944b60fb75
Fix compilation on Windows
...
There are still a bunch of warning that we should remove.
2017-05-30 10:48:32 -07:00
Corentin Wallez
26275d0a16
Make all libraries STATIC for now
...
For shared library to work on Windows to work, we need to add
declspec(export) and declspec(import) annotations to the symbols to
export. This fixes the problem by making all libraries static on
Windows, but we'll need to revisit and do proper symbol exports.
2017-05-30 10:48:32 -07:00
Corentin Wallez
5fbdff6888
Add ValidationTest and an example validation test.
...
Validation tests are tests of the backend state-tracking and validation
code that don't require a GPU as they are running on the null backend.
This commit adds a very simple (and almost useless) BufferValidationTest
as an example of a validation test.
2017-05-30 10:40:43 -07:00
Corentin Wallez
230daf56ad
Misc, noop cleanups
2017-05-30 10:40:43 -07:00
Corentin Wallez
2d641142b0
Add tests for ObjectBase's refcounting
2017-05-30 10:40:43 -07:00
Kai Ninomiya
b2b495b5aa
Forbid explicit transitions to/from attachment usages ( #18 )
2017-05-24 13:07:30 -07:00
Corentin Wallez
79a62bf6e3
Create a Null backend.
...
This will be useful to run validation unittests without using the GPU.
2017-05-24 15:23:53 -04:00
Kai Ninomiya
68df8b0a3a
Introduce render passes
...
* First API design (many features missing, including input attachments)
* Metal implementation (no OpenGL yet)
* Render-to-texture demo (a little broken until we have depth buffers)
* Update examples to use render passes
2017-05-22 10:53:19 -07:00
Corentin Wallez
ca309db58a
Add wire tests for unknown and success error status
2017-05-19 10:41:36 +02:00
Corentin Wallez
75bbcec543
Add wire test for the maybe monad
2017-05-19 10:41:36 +02:00
Corentin Wallez
42f2d3c5f2
Add wire tests for *SetErrorCallback
2017-05-19 10:41:36 +02:00
Corentin Wallez
c85b5c0640
Add wire tests for passing arguments around
...
- Add test for passing value arguments as well as aarrays of them
- Add test for passing C string
- Rework Object array argument test to pass multiple objects
2017-05-19 10:41:36 +02:00
Corentin Wallez
1b7c5e3f70
Mock API: special case the SetErrorCallback procs.
...
Also add a suppression for these procs in wiretests, unless we are
specifically testing them.
2017-05-19 10:41:36 +02:00
Corentin Wallez
0a58812f34
Consolidate unittests in one binary
2017-05-19 10:41:36 +02:00
Corentin Wallez
36cf2dd54b
Make autogenerated validation produce device or builder errors
2017-05-11 11:31:54 +02:00
Corentin Wallez
7f96177289
Implement the builder error callback in the backends
...
This makes the Builder base class retain the error status, if any, and
call the callback on GetResult (or ~Builder, whichever comes first).
2017-05-11 11:31:54 +02:00
Corentin Wallez
5dc7915d38
Introduce a base class for Builder objects.
...
All builder objects will depend from this "Builder" base class. This
will allow having the builder callback logic in only one place.
2017-05-11 11:31:54 +02:00
Corentin Wallez
4b410a33ca
Implement the device error callback.
...
This adds support for "natively defined" API types like callbacks that
will have to be implemented manually for each target language. Also this
splits the concept of "native method" into a set of native methods per
language.
Removes the "Synchronous error" concept that was used to make builders
work in the maybe Monad, this will have to be reinroduced with builder
callbacks.
2017-05-11 11:31:54 +02:00
Corentin Wallez
682a8250b3
Plumb the server->client wire
2017-05-11 11:31:54 +02:00
Corentin Wallez
7f433a5b52
Add bufferOffset to CopyBufferToTexture.
2017-05-10 19:49:52 +02:00
Corentin Wallez
0fba0b4811
Fix usage of C++14 constexpr in HasZeroOrOneBit
2017-04-26 15:17:03 -04:00
Corentin Wallez
f07e3bd4c9
Initial commit of all the NXT integration.
...
More like squashed history, contributors were:
- Kai Ninomiya
- Corentin Wallez
2017-04-20 14:38:20 -04:00