Jason Ekstrand [Sat, 16 May 2015 19:43:16 +0000 (12:43 -0700)]
Merge remote-tracking branch 'fdo-personal/wip/nir-vtn' into vulkan
This adds the SPIR-V -> NIR translator.
Jason Ekstrand [Sat, 16 May 2015 19:34:32 +0000 (12:34 -0700)]
nir/spirv: Don't assert that the current block is empty
It's possible that someone will give us SPIR-V code in which someone
needlessly branches to new blocks. We should handle that ok now.
Jason Ekstrand [Sat, 16 May 2015 19:34:15 +0000 (12:34 -0700)]
nir/spirv: Add initial support for samplers
Jason Ekstrand [Sat, 16 May 2015 19:33:29 +0000 (12:33 -0700)]
nir/spirv: Move Exp and Log to the list of currently unhandled ALU ops
NIR doesn't have the native opcodes for them anymore
Jason Ekstrand [Sat, 16 May 2015 19:32:58 +0000 (12:32 -0700)]
nir/types: Add support for sampler types
Jason Ekstrand [Wed, 6 May 2015 22:36:54 +0000 (15:36 -0700)]
nir/spirv: Make the global constants in spirv.h static
I've been promissed in a bug that this will be fixed in a future version of
the header. However, in the interest of my branch building, I'm adding
these changes in myself for the moment.
Jason Ekstrand [Wed, 6 May 2015 22:33:21 +0000 (15:33 -0700)]
nir/spirv: Handle jump-to-loop in a more general way
Jason Ekstrand [Wed, 6 May 2015 19:54:02 +0000 (12:54 -0700)]
nir/spirv: Handle boolean uniforms correctly
Jason Ekstrand [Wed, 6 May 2015 19:37:10 +0000 (12:37 -0700)]
nir/spirv: Handle control-flow with loops
Jason Ekstrand [Wed, 6 May 2015 19:36:31 +0000 (12:36 -0700)]
nir/spirv: Set a name on temporary variables
Jason Ekstrand [Wed, 6 May 2015 19:36:09 +0000 (12:36 -0700)]
nir/spirv: Use the correct length for copying string literals
Jason Ekstrand [Wed, 6 May 2015 19:35:30 +0000 (12:35 -0700)]
nir/spirv: Make vtn_ssa_value handle constants as well as ssa values
Jason Ekstrand [Mon, 4 May 2015 22:17:56 +0000 (15:17 -0700)]
nir/spirv: Add initial support for GLSL 4.50 builtins
Jason Ekstrand [Mon, 4 May 2015 19:25:09 +0000 (12:25 -0700)]
nir/spirv: Split the core datastructures into a header file
Jason Ekstrand [Mon, 4 May 2015 19:12:23 +0000 (12:12 -0700)]
nir/spirv: Use the builder for all instructions
We don't actually use it to create all the instructions but we do use it
for insertion always. This should make things far more consistent for
implementing extended instructions.
Jason Ekstrand [Mon, 4 May 2015 19:04:02 +0000 (12:04 -0700)]
nir/spirv: Add support for a bunch of ALU operations
Jason Ekstrand [Mon, 4 May 2015 19:02:57 +0000 (12:02 -0700)]
nir/spirv: Add support for indirect array accesses
Jason Ekstrand [Mon, 4 May 2015 19:02:24 +0000 (12:02 -0700)]
nir/spirv: Explicitly type constants and SSA values
Jason Ekstrand [Mon, 4 May 2015 17:23:09 +0000 (10:23 -0700)]
nir/spirv: Handle OpBranchConditional
We do control-flow handling as a two-step process. The first step is to
walk the instructions list and record various information about blocks and
functions. This is where the acutal nir_function_overload objects get
created. We also record the start/stop instruction for each block. Then
a second pass walks over each of the functions and over the blocks in each
function in a way that's NIR-friendly and actually parses the instructions.
Jason Ekstrand [Mon, 4 May 2015 17:22:52 +0000 (10:22 -0700)]
nir/spirv: Add a helper for getting a value as an SSA value
Jason Ekstrand [Fri, 1 May 2015 21:00:57 +0000 (14:00 -0700)]
nir/spirv: Split instruction handling into preamble and body sections
Jason Ekstrand [Fri, 1 May 2015 18:28:18 +0000 (11:28 -0700)]
nir/spirv: Implement load/store instructiosn
Jason Ekstrand [Mon, 4 May 2015 17:19:24 +0000 (10:19 -0700)]
nir: Add a helper for getting the tail of a deref chain
Jason Ekstrand [Fri, 1 May 2015 18:28:01 +0000 (11:28 -0700)]
nir/spirv: Actaully add variables to the funciton or shader
Jason Ekstrand [Fri, 1 May 2015 18:27:44 +0000 (11:27 -0700)]
nir/spirv: Add a vtn_untyped_value helper
Jason Ekstrand [Fri, 1 May 2015 18:27:21 +0000 (11:27 -0700)]
nir/spirv: Use vtn_value in the types code and fix a off-by-one error
Jason Ekstrand [Fri, 1 May 2015 18:26:40 +0000 (11:26 -0700)]
nir/types: Add an is_vector_or_scalar helper
Jason Ekstrand [Thu, 30 Apr 2015 03:56:36 +0000 (20:56 -0700)]
nir/spirv: Add support for deref chains
Jason Ekstrand [Thu, 30 Apr 2015 03:56:17 +0000 (20:56 -0700)]
nir/types: Add a scalar type constructor
Jason Ekstrand [Thu, 30 Apr 2015 03:19:34 +0000 (20:19 -0700)]
nir/spirv: Add support for OpLabel
Jason Ekstrand [Thu, 30 Apr 2015 03:10:20 +0000 (20:10 -0700)]
nir/spirv: Add support for declaring functions
Jason Ekstrand [Thu, 30 Apr 2015 03:09:36 +0000 (20:09 -0700)]
nir/types: Add accessors for function parameter/return types
Jason Ekstrand [Thu, 30 Apr 2015 02:37:41 +0000 (19:37 -0700)]
nir/spirv: Add support for declaring variables
Deref chains and variable load/store operations are still missing.
Jason Ekstrand [Thu, 30 Apr 2015 01:14:11 +0000 (18:14 -0700)]
nir/spirv: Add support for constants
Jason Ekstrand [Wed, 29 Apr 2015 21:36:01 +0000 (14:36 -0700)]
nir/spirv: Add basic support for types
Jason Ekstrand [Wed, 29 Apr 2015 21:28:37 +0000 (14:28 -0700)]
nir/types: Add more helpers for creating types
Jason Ekstrand [Wed, 29 Apr 2015 21:48:12 +0000 (14:48 -0700)]
glsl/types: Expose the function_param and struct_field structs to C
Previously, they were hidden behind a #ifdef __cplusplus so C wouldn't find
them. This commit simpliy moves the ifdef.
Jason Ekstrand [Wed, 25 Feb 2015 00:29:33 +0000 (16:29 -0800)]
glsl/types: Add support for function types
Jason Ekstrand [Wed, 25 Feb 2015 00:27:32 +0000 (16:27 -0800)]
glsl: Add GLSL_TYPE_FUNCTION to the base types enums
Jason Ekstrand [Wed, 29 Apr 2015 21:34:06 +0000 (14:34 -0700)]
nir/spirv: Rework the way values are added
Instead of having functions to add values and set various things, we just
have a function that does a few asserts and then returns the value. The
caller is then responsible for setting the various fields.
Jason Ekstrand [Wed, 29 Apr 2015 21:32:55 +0000 (14:32 -0700)]
nir/spirv: Add stub support for extension instructions
Jason Ekstrand [Wed, 29 Apr 2015 21:29:38 +0000 (14:29 -0700)]
REVERT: Add a simple helper program for testing SPIR-V -> NIR translation
Jason Ekstrand [Wed, 29 Apr 2015 21:30:22 +0000 (14:30 -0700)]
glsl/compiler: Move the error_no_memory stub to standalone_scaffolding.cpp
Jason Ekstrand [Wed, 29 Apr 2015 00:43:16 +0000 (17:43 -0700)]
nir: Add the start of a SPIR-V to NIR translator
At the moment, it can handle the very basics of strings and can ignore
debug instructions. It also has basic support for decorations.
Jason Ekstrand [Tue, 28 Apr 2015 04:13:44 +0000 (21:13 -0700)]
nir: Import the revision 30 SPIR-V header from Khronos
Jason Ekstrand [Sat, 16 May 2015 17:42:51 +0000 (10:42 -0700)]
vk/device: Use bias rather than layers for computing binding table size
Because we statically use the first 8 binding table entries for render
targets, we need to create a table of size 8 + surfaces.
Jason Ekstrand [Sat, 16 May 2015 17:23:43 +0000 (10:23 -0700)]
vk/meta: Make clear a no-op if no layers need clearing
Among other things, this prevents recursive meta.
Jason Ekstrand [Sat, 16 May 2015 17:28:04 +0000 (10:28 -0700)]
vk/meta: Save and restore the old bindings pointer
If we don't do this then recursive meta is completely broken. What happens
is that the outer meta call may change the bindings pointer and the inner
meta call will change it again and, when it exits set it back to the
default. However, the outer meta call may be relying on it being left
alone so it uses the non-meta descriptor sets instead of its own.
Jason Ekstrand [Sat, 16 May 2015 17:23:09 +0000 (10:23 -0700)]
vk/device: Simplify surface_count calculation
Jason Ekstrand [Sat, 16 May 2015 05:17:05 +0000 (22:17 -0700)]
vk/glsl_helpers: Fix GLSL_VK_SHADER with respect to commas
Previously, the GLSL_VK_SHADER macro didn't work if the shader contained
commas outside of parentheses due to the way the C preprocessor works.
This commit fixes this by making it variadic again and doing it correctly
this time.
Kristian Høgsberg [Sat, 16 May 2015 00:03:18 +0000 (17:03 -0700)]
vk: Make cmd_buffer->bindings a pointer
This lets us save and restore efficiently by just moving the pointer to
a temporary bindings struct for meta.
Kristian Høgsberg [Fri, 15 May 2015 23:34:31 +0000 (16:34 -0700)]
vk: Move vertex buffers into struct anv_bindings
Kristian Høgsberg [Fri, 15 May 2015 23:15:04 +0000 (16:15 -0700)]
vk: Fix GLSL_VK_SHADER macro
Stringify doesn't work with __ARGV__. The last macro argument swallows
up excess arguments and as such we can just stringify that.
Kristian Høgsberg [Fri, 15 May 2015 23:07:17 +0000 (16:07 -0700)]
vk: Fix warning from missing initializer
Struct initializers need to be { 0, } to zero out the variable they're
initializing.
Kristian Høgsberg [Fri, 15 May 2015 22:03:21 +0000 (15:03 -0700)]
vk: Build binding tables at bind descriptor time
This changes the way descriptor sets and layouts work so that we fill
out binding table contents at the time we bind descriptor sets. We
manipulate the binding table contents and sampler state in a shadow-copy
in anv_cmd_buffer. At draw time, we allocate the actual binding table
and sampler state and flush the anv_cmd_buffer copies.
Kristian Høgsberg [Fri, 15 May 2015 21:59:59 +0000 (14:59 -0700)]
vk: Update the bind map length to reflect MAX_SETS
Kristian Høgsberg [Thu, 14 May 2015 16:08:45 +0000 (09:08 -0700)]
vk: Flip back to using memfd for the allocators
Kristian Høgsberg [Wed, 13 May 2015 22:34:34 +0000 (15:34 -0700)]
vk: Rename dyn_state_pool to dynamic_state_pool
Given that we already tolerate surface_state_pool and the even longer
instruction_state_pool, there's no reason to arbitrarily abbreviate
dynamic.
Kristian Høgsberg [Wed, 13 May 2015 22:31:26 +0000 (15:31 -0700)]
vk: Consolidate image, buffer and color attachment views
These are all just surface state, offset and a bo.
Jason Ekstrand [Fri, 15 May 2015 02:07:50 +0000 (19:07 -0700)]
vk: Add a GLSL scraper utility
This new utility, glsl_scraper.py scrapes C files for instances of the
GLSL_VK_SHADER macro, pulls out the shader source, and compiles it to
SPIR-V. The compilation is done using glslValidator. The result is then
placed into another C file as arrays of dwords that can be easiliy handed
to a Vulkan driver.
Jason Ekstrand [Thu, 14 May 2015 18:58:58 +0000 (11:58 -0700)]
vk/meta: Add a magic GLSL shader source macro
Jason Ekstrand [Thu, 14 May 2015 18:39:32 +0000 (11:39 -0700)]
vk/meta: Add a better comment about the VS for blits
Jason Ekstrand [Thu, 14 May 2015 05:27:38 +0000 (22:27 -0700)]
vk/test: Use VK_IMAGE_TILING_OPTIMAL for the render target
Jason Ekstrand [Thu, 14 May 2015 05:18:37 +0000 (22:18 -0700)]
vk/test: Do a copy of the RT into a linear buffer and write that to a PNG
Jason Ekstrand [Thu, 14 May 2015 00:37:47 +0000 (17:37 -0700)]
vk/meta: Add the start of a blit implementation
Currently, we only implement CopyImageToBuffer
Jason Ekstrand [Thu, 14 May 2015 05:17:38 +0000 (22:17 -0700)]
vk/pipeline: Default to a SamplerCount of 1 for PS
Jason Ekstrand [Thu, 14 May 2015 05:16:04 +0000 (22:16 -0700)]
vk/pipeline: Add an extra flag for force-disabling the vertex shader
This way we can pass in a vertex shader and yet have the pipeline emit an
empty 3DSTATE_VS packet. We need this for meta because we need to trick
the compiler into not deleting our inputs but at the same time disable the
VS so that we can use a rectlist. This should go away once we actually get
SPIR-V.
Jason Ekstrand [Thu, 14 May 2015 05:13:05 +0000 (22:13 -0700)]
vk/pass: Emit a flushing pipe control at the end of the pass
This is rather crude but it at least makes sure that all the render targets
get flushed at the end of the pass. We probably actually want to do
somthing based on image layout traansitions, but this will work for now.
Jason Ekstrand [Thu, 14 May 2015 05:12:01 +0000 (22:12 -0700)]
vk/compiler: Set the binding table texture_start
This is by no means a complete solution to the binding table problems.
However, it does make texturing actually work. Before, we were texturing
from the render target since they were both starting at 0.
Jason Ekstrand [Thu, 14 May 2015 05:11:20 +0000 (22:11 -0700)]
vk/compiler: Zero the prog data
We use prog_data[stage] != NULL to determine whether or not we need to
clean up that stage. Make sure it default to NULL.
Jason Ekstrand [Thu, 14 May 2015 00:37:12 +0000 (17:37 -0700)]
vk/image: Stash more information in images and views
Jason Ekstrand [Thu, 14 May 2015 00:34:37 +0000 (17:34 -0700)]
vk/meta: Save/restore more stuff in cmd_buffer_restore
Chad Versace [Thu, 14 May 2015 00:49:26 +0000 (17:49 -0700)]
vk: Install headers
I need this for building a testsuite.
Kristian Høgsberg [Wed, 13 May 2015 21:43:08 +0000 (14:43 -0700)]
vk: Add support for sampler descriptors
Kristian Høgsberg [Wed, 13 May 2015 21:02:35 +0000 (14:02 -0700)]
vk: Use a typesafe anv_descriptor struct
Kristian Høgsberg [Wed, 13 May 2015 20:55:43 +0000 (13:55 -0700)]
vk: Create and bind a sampler in vk.c
Kristian Høgsberg [Wed, 13 May 2015 20:53:01 +0000 (13:53 -0700)]
vk: Fix copy-n-paste sType in vkCreateSampler
Kristian Høgsberg [Wed, 13 May 2015 20:51:08 +0000 (13:51 -0700)]
vk: Add a dynamic state stream to anv_cmd_buffer
We'll need this for sampler state.
Kristian Høgsberg [Wed, 13 May 2015 20:38:55 +0000 (13:38 -0700)]
vk: Move struct anv_sampler to private.h
Kristian Høgsberg [Wed, 13 May 2015 18:49:30 +0000 (11:49 -0700)]
vk: Allocate layout->count number of descriptors
layout->count is the number of descriptors the application
requested. layout->total is the number of entries we need across all
stages.
Kristian Høgsberg [Wed, 13 May 2015 04:44:59 +0000 (21:44 -0700)]
vk: Fill out sampler state from API values
Chad Versace [Wed, 13 May 2015 19:05:38 +0000 (12:05 -0700)]
vk: Ignore vk executable
Kristian Høgsberg [Tue, 12 May 2015 21:38:58 +0000 (14:38 -0700)]
vk: Fix stale error handling in vkQueueSubmit
Kristian Høgsberg [Tue, 12 May 2015 21:38:12 +0000 (14:38 -0700)]
vk: Submit all cmd buffers passed to vkQueueSubmit
Kristian Høgsberg [Tue, 12 May 2015 21:25:47 +0000 (14:25 -0700)]
vk: Add generated header for HSW and IVB (GEN75 and GEN7)
Jason Ekstrand [Tue, 12 May 2015 20:44:43 +0000 (13:44 -0700)]
vk: Add stub() and stub_return() macros and mark piles of functions as stubs
Jason Ekstrand [Tue, 12 May 2015 20:43:36 +0000 (13:43 -0700)]
vk/util: Add a anv_finishme function/macro
Jason Ekstrand [Tue, 12 May 2015 20:03:50 +0000 (13:03 -0700)]
vk/meta: Break setting up meta clear state into it's own functin
Jason Ekstrand [Tue, 12 May 2015 19:52:53 +0000 (12:52 -0700)]
vk/pipeline: Add support for disabling the scissor in "extra"
Kristian Høgsberg [Tue, 12 May 2015 06:25:06 +0000 (23:25 -0700)]
vk: Add clear load-op for render passes
Kristian Høgsberg [Tue, 12 May 2015 06:20:01 +0000 (23:20 -0700)]
vk: Add support for driver-internal custom pipelines
This lets us disable the viewport, use rect lists and repclear.
Kristian Høgsberg [Tue, 12 May 2015 05:25:52 +0000 (22:25 -0700)]
vk: Fix 3DSTATE_VERTEX_BUFFER emission
Set VertexBufferIndex to the attribute binding, not the location.
Kristian Høgsberg [Tue, 12 May 2015 05:24:57 +0000 (22:24 -0700)]
vk: Add 32 bpc signed and unsigned integer formats
Kristian Høgsberg [Tue, 12 May 2015 05:23:38 +0000 (22:23 -0700)]
vk: Add anv_batch_emit_merge() helper macro
This lets us emit a state packet by merging to half-backed versions,
typically one from the pipeline object and one from a dynamic state
objects.
Kristian Høgsberg [Tue, 12 May 2015 05:19:58 +0000 (22:19 -0700)]
vk: Store bo pointer in anv_image and anv_buffer
We don't need to point back to the memory object the bo came from.
Pointing directly to a bo lets us bind images and buffers to other
bos - like our allocator bos.
Kristian Høgsberg [Tue, 12 May 2015 05:17:04 +0000 (22:17 -0700)]
vk: Support not having a vertex shader
This lets us bypass the vertex shader and pass data straight into
the rasterizer part of the pipeline.
Kristian Høgsberg [Tue, 12 May 2015 05:12:56 +0000 (22:12 -0700)]
vk: Allow NULL as a valid pipeline layout
Vertex buffers and render targets aren't part of the layout so having
an empty layout is pretty common.
Kristian Høgsberg [Sat, 9 May 2015 05:32:37 +0000 (22:32 -0700)]
Add vulkan driver for BDW
Kenneth Graunke [Sat, 9 May 2015 02:36:19 +0000 (19:36 -0700)]
nir: Fix aggressive typos in nir_from_ssa.c.
s/agressive/aggressive/g
Trivial.
Jason Ekstrand [Fri, 8 May 2015 16:48:33 +0000 (09:48 -0700)]
nir/search: Save/restore the variables_seen bitmask when matching
Shader-db results on Broadwell:
total instructions in shared programs:
7152330 ->
7137006 (-0.21%)
instructions in affected programs:
1330548 ->
1315224 (-1.15%)
helped: 5797
HURT: 76
GAINED: 0
LOST: 8
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>