OSDN Git Service
Chad Versace [Tue, 5 Jan 2016 22:37:45 +0000 (14:37 -0800)]
anv/meta: Teach meta how to blit from a 1D image
Meta needed a VkShader with a 1D sampler type.
Jason Ekstrand [Wed, 6 Jan 2016 00:18:01 +0000 (16:18 -0800)]
nir/spirv: Fix switch statements with duplicate cases
Jason Ekstrand [Tue, 5 Jan 2016 23:56:59 +0000 (15:56 -0800)]
nir/spirv/cfg: Assert that blocks only ever get added once
This effectively prevents infinite loops in cfg_walk_blocks.
Jason Ekstrand [Tue, 5 Jan 2016 22:59:40 +0000 (14:59 -0800)]
nir/spirv: Simplify phi node handling
Instead of trying to crawl through predecessor chains and build phi nodes,
we just do a poor-man's out-of-ssa on the spot. The into-SSA pass will
deal with putting the actual phi nodes in for us.
Jason Ekstrand [Tue, 5 Jan 2016 21:42:00 +0000 (13:42 -0800)]
anv/pipeline: Lower indirect temporaries and inputs
Jason Ekstrand [Tue, 5 Jan 2016 21:04:07 +0000 (13:04 -0800)]
nir: Add an indirect deref lowering pass
Kristian Høgsberg Kristensen [Tue, 5 Jan 2016 20:00:54 +0000 (12:00 -0800)]
vk: Implement a basic pipeline cache
This is not really a cache yet, but it allows us to share one state
stream for all pipelines, which means we can bump the block size without
wasting a lot of memory.
Kristian Høgsberg Kristensen [Tue, 5 Jan 2016 19:43:25 +0000 (11:43 -0800)]
vk: Destroy device->mutex when destroying the device
Chad Versace [Tue, 5 Jan 2016 19:35:44 +0000 (11:35 -0800)]
isl: Don't force linear for 1d surfaces in gen7_filter_tiling()
gen7_filter_tiling() should filter out only tiling flags that are
incompatible with the surface. It shouldn't make performance decisions,
such as forcing linear for 1D; that's the role of the caller.
Chad Versace [Tue, 5 Jan 2016 19:28:49 +0000 (11:28 -0800)]
isl: Document gen7_filter_tiling()
Chad Versace [Tue, 5 Jan 2016 18:39:21 +0000 (10:39 -0800)]
isl: Prefer linear tiling for 1D surfaces
Chad Versace [Tue, 5 Jan 2016 17:53:11 +0000 (09:53 -0800)]
isl: Remove isl_format_layout::bpb
struct isl_format_layout contained two near-redundant members: bpb (bits
per block) and bs (block size). There do exist some hardware formats for
which bpb != 8 * bs, but Vulkan does not use them. Therefore we don't
need bpb.
Chad Versace [Tue, 5 Jan 2016 17:59:07 +0000 (09:59 -0800)]
anv: Use isl_format_layout::bs instead of ::bpb
For all formats used by Vulkan, 8 * bs == bpb.
(bs=block_size_in_bytes, bpb=bits_per_block)
Chad Versace [Tue, 5 Jan 2016 01:09:11 +0000 (17:09 -0800)]
isl: Align isl_surf::phys_level0_sa to the format's compression block
Chad Versace [Tue, 5 Jan 2016 01:00:49 +0000 (17:00 -0800)]
isl: Fix mis-documented units of isl_surf::phys_level_sa
It's in physical surface samples. Hence the _sa suffix.
Jason Ekstrand [Tue, 5 Jan 2016 06:08:24 +0000 (22:08 -0800)]
nir/spirv: Add support for the ControlBarrier instruction
Jason Ekstrand [Tue, 5 Jan 2016 05:36:11 +0000 (21:36 -0800)]
anv/UpdateDescriptorSets: Use the correct index for the buffer view
Jason Ekstrand [Tue, 5 Jan 2016 04:59:16 +0000 (20:59 -0800)]
nir/spirv: Implement extended add, sub, and mul
Jason Ekstrand [Tue, 5 Jan 2016 01:32:33 +0000 (17:32 -0800)]
nir/spirv: Add support for bitfield operations
Jason Ekstrand [Tue, 5 Jan 2016 01:16:44 +0000 (17:16 -0800)]
nir/spirv: Add support for msb/lsb opcodes
Jason Ekstrand [Tue, 5 Jan 2016 01:04:26 +0000 (17:04 -0800)]
nir/spirv: Add a documenting assert for OpConstantSampler
Jason Ekstrand [Tue, 5 Jan 2016 00:57:01 +0000 (16:57 -0800)]
nir/spirv: Add initial support for ConstantNull
Chad Versace [Tue, 5 Jan 2016 00:31:10 +0000 (16:31 -0800)]
isl: Align single-level 2D surfaces to compression block
This fixes an assertion failure at isl.c:1003.
Reported-by: Nanley Chery <nanley.g.chery@intel.com>
Jason Ekstrand [Fri, 1 Jan 2016 16:45:35 +0000 (08:45 -0800)]
anv/formats: Hand out different formats based on tiled vs. linear
Jason Ekstrand [Fri, 1 Jan 2016 22:09:17 +0000 (14:09 -0800)]
anv/image_view: Separate vulkan and isl formats
Previously, anv_image_view had a anv_format pointer that we used for
everything. This commit replaces that pointer with a VkFormat enum copied
from the API and an isl_format. In order to implement RGB formats, we have
to use a different isl_format for the actual surface state than the obvious
one from the VkFormat. Separating the two helps us keep things streight.
Jason Ekstrand [Fri, 1 Jan 2016 22:12:22 +0000 (14:12 -0800)]
anv_get_isl_format: Support depth+stencil aspect value
You just get the depth format in this case.
Jason Ekstrand [Fri, 1 Jan 2016 21:47:18 +0000 (13:47 -0800)]
anv/image: Do more work in anv_image_view_init
There was a bunch of common code in gen7/8_image_view_init that we really
should be sharing.
Jason Ekstrand [Fri, 1 Jan 2016 16:42:35 +0000 (08:42 -0800)]
anv/formats: Rework GetPhysicalDeviceFormatProperties
It now calls get_isl_format to get both linear and tiled views of the
format and determines linear/tiled properties from that. Buffer properties
are determined from the linear format.
Jason Ekstrand [Fri, 1 Jan 2016 02:31:31 +0000 (18:31 -0800)]
anv/formats: Add a tiling parameter to get_isl_format
Currently, this parameter does nothing.
Jason Ekstrand [Thu, 31 Dec 2015 22:57:51 +0000 (14:57 -0800)]
isl/format: Add some helpers for working with RGB formats
Jason Ekstrand [Thu, 31 Dec 2015 22:30:51 +0000 (14:30 -0800)]
isl: Add a file for format helpers
Jason Ekstrand [Thu, 31 Dec 2015 21:51:15 +0000 (13:51 -0800)]
genX/state: Pull some generic helpers into a shared header
Jason Ekstrand [Thu, 31 Dec 2015 21:22:43 +0000 (13:22 -0800)]
meta/blit: Rework how format and aspect choices are made
This commit does two things. First, it introduces choose_* functions for
chosing formats and aspects. Second, it changes the copy (not blit) code
to use appropreately sized UINT formats for everything except depth. There
are two main reasons for this: First, it means that compressed and other
non-renderable texture upload should "just work" because it won't be
tripping over non-renderable formats. Second, it allows us to easly copy
an RGB buffer to and from an RGBX image because the formats will get
switched over to their UINT variants and the shader will deal with the
extra channel for us.
Jason Ekstrand [Thu, 31 Dec 2015 20:39:34 +0000 (12:39 -0800)]
anv/image: Add a vk_format field
We've been trying to move away from anv_format for a while and this should
help with the transition. There are cases (mostly in meta) where we need
the original format for the image and not the isl_format. These will be
moved over to the new vk_format and everythign else will use the isl_format
from the particular anv_surface.
Chad Versace [Mon, 4 Jan 2016 23:30:27 +0000 (15:30 -0800)]
isl: Document mnemonic in Yf and Ys tiling
The 'f' means "four K". The 's' means "sixty-four K".
Kristian Høgsberg Kristensen [Mon, 4 Jan 2016 18:53:47 +0000 (10:53 -0800)]
isl: Use isl_align_npot for row_pitch
Many formats are not power-of-two bytes per pixels and we need the
non-power-of-two align macro here.
This reverts the revert from
4f9a211b, but keeps the change from
a827b553
that fixed the yuv if-else mix-up.
Kristian Høgsberg Kristensen [Mon, 4 Jan 2016 18:42:50 +0000 (10:42 -0800)]
vk: Don't leak pipeline if initialization fails
Kristian Høgsberg Kristensen [Mon, 4 Jan 2016 06:58:00 +0000 (22:58 -0800)]
vk: Allocate subpass attachment in one big block
This avoids making a lot of small allocations and handles allocation
failure correctly.
Fixes dEQP-VK.api.object_management.alloc_callback_fail.* failures.
Kristian Høgsberg Kristensen [Mon, 4 Jan 2016 06:43:47 +0000 (22:43 -0800)]
vk: Handle allocation failures in meta init paths
Fixes dEQP-VK.api.object_management.alloc_callback_fail.* failures.
Kristian Høgsberg Kristensen [Mon, 4 Jan 2016 06:42:01 +0000 (22:42 -0800)]
vk: Handle allocation failure in anv_pipeline_init()
Fixes dEQP-VK.api.object_management.alloc_callback_fail.* failures.
Kristian Høgsberg Kristensen [Mon, 4 Jan 2016 05:31:22 +0000 (21:31 -0800)]
vk: Call vk_error when we generate a VK_ERROR
Kristian Høgsberg Kristensen [Mon, 4 Jan 2016 05:15:29 +0000 (21:15 -0800)]
vk: Only finish wayland wsi if we created it
Failure during instance creation will leave instance->wayland_wsi
undefined. When we then try to clean that up we crash. Set
instance->wayland_wsi to NULL on failure and only clean it up if it's
non-NULL.
Fixes part of dEQP-VK.api.object_management.alloc_callback_fail.*
Chad Versace [Fri, 1 Jan 2016 17:52:57 +0000 (09:52 -0800)]
isl: Fix row pitch for linear buffers
isl always aligned the row pitch to the surface's image alignment. This
was sometimes wrong when the surface backed a VkBuffer. For a VkBuffer,
the surface's row pitch is set by VkBufferImageCopy::bufferRowLength,
whose required alignment is only that of the VkFormat.
In particular, VkBuffer rows are packed in many dEQP and Crucible tests.
And packed rows are rarely aligned to the surface's image alignment.
Fixes: dEQP-VK.pipeline.image.view_type.2d.format.r8g8b8a8_unorm.size.13x13
Chad Versace [Fri, 1 Jan 2016 18:37:25 +0000 (10:37 -0800)]
isl: Fix swapped if-else in isl_calc_row_pitch
The YUV case was applied to non-YUV formats. Oops.
Jason Ekstrand [Sat, 2 Jan 2016 19:51:40 +0000 (11:51 -0800)]
nir/spirv: Fix group decorations
They were completely bogus before. For one thing, OpDecorationGroup
created a value of type undef rather than decoration_group. Also
OpGroupMemberDecorate didn't properly apply the decoration to the different
members of the different groups. It *should* be correct now but there's no
good way to test it yet.
Jason Ekstrand [Sat, 2 Jan 2016 15:52:22 +0000 (07:52 -0800)]
anv/device: Only allocate whole pages in AllocateMemory
The kernel is going to give us whole pages anyway, so allocating part of a
page doesn't help. And this ensures that we can always work with whole
pages.
Jason Ekstrand [Fri, 1 Jan 2016 17:26:06 +0000 (09:26 -0800)]
anv/device: Handle non-4k-aligned calls to MapMemory
As per the spec:
minMemoryMapAlignment is the minimum required alignment, in bytes, of
host-visible memory allocations within the host address space. When
mapping a memory allocation with vkMapMemory, subtracting offset bytes
from the returned pointer will always produce a multiple of the value of
this limit.
Jason Ekstrand [Thu, 31 Dec 2015 20:07:23 +0000 (12:07 -0800)]
anv/format: Get rid of num_channels
Jason Ekstrand [Thu, 31 Dec 2015 20:07:10 +0000 (12:07 -0800)]
anv/cmd_buffer: Fix a pointer-cast typo
Chad Versace [Thu, 31 Dec 2015 20:02:04 +0000 (12:02 -0800)]
isl: Document some isl_surf::phys_level0_sa invariants
isl_dim_layout restricts the range of isl_surf::phys_level0_sa.
Jason Ekstrand [Thu, 31 Dec 2015 20:00:58 +0000 (12:00 -0800)]
anv/pipeline: Better vertex input channel setup
First off, it now uses isl formats instead of anv_format. Also, it
properly handles integer vs. floating-point default channels and can
properly handle alpha-only channels. (Not sure if those are allowed).
Jason Ekstrand [Thu, 31 Dec 2015 19:58:24 +0000 (11:58 -0800)]
anv/pipeline: Move vk_to_gen tables into a shared header
Chad Versace [Thu, 31 Dec 2015 19:56:13 +0000 (11:56 -0800)]
isl: Better document surface units
Logical pixels, physical surface samples, and physical surface elements.
Requested-by: Jason Ekstrand <jason.ekstrand@intel.com>
Chad Versace [Thu, 31 Dec 2015 19:55:48 +0000 (11:55 -0800)]
isl: Document the 3D block extent of isl_format
Jason Ekstrand [Thu, 31 Dec 2015 05:57:04 +0000 (21:57 -0800)]
nir/spirv: Add a missing break statement in handle_image
Jason Ekstrand [Thu, 31 Dec 2015 05:01:55 +0000 (21:01 -0800)]
Revert "isl: Fix assertion failure for npot pixel formats"
This reverts commit
96d1baa88d37c51c94579f650cfd9465d28634f4.
Jason Ekstrand [Thu, 31 Dec 2015 04:54:27 +0000 (20:54 -0800)]
nir/spirv: Handle push constants after decorations
Jason Ekstrand [Thu, 31 Dec 2015 03:32:41 +0000 (19:32 -0800)]
anv/device: Place memory types at heapIndex == 0
Previously, they were at heapIndex == 1 even though we only advertised one
heap.
Jason Ekstrand [Thu, 31 Dec 2015 02:51:57 +0000 (18:51 -0800)]
nir/spirv: Fix constant num_elements and allocation
Thanks to the addition of nir_clone, we now have a num_elements field in
nir_constant which we weren't setting. Also, constants have to be parented
to the variable they initialize, so we have to make a copy.
Jason Ekstrand [Thu, 31 Dec 2015 02:51:06 +0000 (18:51 -0800)]
nir/lower_outputs_to_temporaries: Reparent constant initializers
Jason Ekstrand [Thu, 31 Dec 2015 02:44:19 +0000 (18:44 -0800)]
nir/clone: Expose nir_constant_clone
Jason Ekstrand [Thu, 31 Dec 2015 01:43:00 +0000 (17:43 -0800)]
nir/gather_info: Add support for end_primitive_with_counter
Jason Ekstrand [Thu, 31 Dec 2015 01:32:03 +0000 (17:32 -0800)]
nir/spirv: Handle OpLine
Jason Ekstrand [Thu, 31 Dec 2015 01:31:51 +0000 (17:31 -0800)]
nir/spirv: Let OpEntryPoint act as an OpName
Jason Ekstrand [Thu, 31 Dec 2015 01:31:19 +0000 (17:31 -0800)]
nir/lower_outputs_to_temporaries: Take a nir_function entrypoint
Jason Ekstrand [Thu, 31 Dec 2015 01:17:12 +0000 (17:17 -0800)]
nir/spirv: Add support for multiple entrypoints per shader
This is done by passing the entrypoint name into spirv_to_nir. It will
then process the shader as if that were the only entrypoint we care about.
Instead of returning a nir_shader, it now returns a nir_function.
Jason Ekstrand [Thu, 31 Dec 2015 01:00:16 +0000 (17:00 -0800)]
nir/spirv: Get the shader stage from the SPIR-V
Previously, we depended on it being passed in.
Jason Ekstrand [Thu, 31 Dec 2015 00:48:59 +0000 (16:48 -0800)]
nir/spirv: Use shader stage for determining variable locations
Jason Ekstrand [Thu, 31 Dec 2015 00:41:54 +0000 (16:41 -0800)]
nir/spirv: Get rid of default GS info
shaderc has been fixed for a while now.
Jason Ekstrand [Thu, 31 Dec 2015 00:38:16 +0000 (16:38 -0800)]
nir/spirv: Handle execution modes as decorations
They're basically the same thing.
Jason Ekstrand [Thu, 31 Dec 2015 00:35:34 +0000 (16:35 -0800)]
nir/spirv: Separate handling of preamble from type/var/const instructions
Chad Versace [Thu, 31 Dec 2015 00:26:10 +0000 (16:26 -0800)]
isl: Fix assertion failure for npot pixel formats
When aligning to isl_format_layout::bs (which is the number of bytes in
the pixel), use isl_align_npot() instead of isl_align(), because
isl_align() works only for power-of-2 alignment.
Fixes assertion in
dEQP-VK.pipeline.image.view_type.1d.format.r16g16b16_sfloat.size.512x1.
Jason Ekstrand [Wed, 30 Dec 2015 22:41:13 +0000 (14:41 -0800)]
nir/spirv/GLSL450: Add support for SAbs
Kenneth Graunke [Wed, 30 Dec 2015 00:21:09 +0000 (16:21 -0800)]
nir/spirv: Implement IsInf and IsNan built-ins.
Jason Ekstrand [Wed, 30 Dec 2015 22:02:20 +0000 (14:02 -0800)]
isl: Tile-align height in image size calculation
This fixes a bunch of gpu hangs on the dEQP-VK.glsl.ShaderExecutor.common
group of CTS tests.
Kenneth Graunke [Wed, 30 Dec 2015 21:22:32 +0000 (13:22 -0800)]
Revert "nir/spirv: Update to the 1.0 GLSL.std.450 header"
This reverts commit
b33f5d388979f23c583c78f10a18a941cb04ce04,
and also removes the (empty) case statements for the new built-ins.
It doesn't look like glslang has updated yet, so updating the header
just breaks everything, as we no longer agree on opcode numbers.
Jason Ekstrand [Wed, 30 Dec 2015 19:40:38 +0000 (11:40 -0800)]
anv/allocator: Rework state streams again
If we're going to hav valgrind verify state streams then we need to ensure
that once we choose a pointer into a block we always use that pointer until
the block is freed. I was trying to do this with the "current_map" thing.
However, that breaks down because you have to use the map from the block
pool to get to the stream_block to get at current_map. Instead, this
commit changes things to track the stream_block by pointer instead of by
offset into the block pool.
Jason Ekstrand [Wed, 30 Dec 2015 18:37:50 +0000 (10:37 -0800)]
gen7/8/cmd_buffer: Allocate the correct ammount for COLOR_CALC_STATE
We were allocating 6 bytes when we should have been allocating 6 dwords.
Jason Ekstrand [Wed, 30 Dec 2015 18:33:09 +0000 (10:33 -0800)]
anv/stream_alloc: Properly manage valgrind NOACCESS and UNDEFINED status
When I first did the valgrindifying for stream allocators, I misunderstood
some things about valgrind's expectations for NOACCESS and UNDEFINED.
First off, valgrind expects things to be marked NOACCESS before you
allocate out of them. Since our blocks came from a pool backed by a
mmapped memfd, they came in as UNDEFINED; we needed to mark them as
NOACCESS. Also, I didn't realize that VALGRIND_MEMPOOL_CHANGE only updated
the mempool allocation state and didn't actually change definedness; we had
to add a VALGRIND_MAKE_MEM_UNDEFINED to get rid of the NOACCESS on the
newly allocated portion.
Kristian Høgsberg Kristensen [Wed, 30 Dec 2015 07:59:38 +0000 (23:59 -0800)]
nir/spirv: Lower gl_GlobalInvocationID correctly
Use nir_intrinsic_load_local_invocation_id, not
nir_intrinsic_load_invocation_id (missing 'local'), which is a geometry
shader built-in.
Jason Ekstrand [Wed, 30 Dec 2015 03:23:25 +0000 (19:23 -0800)]
nir/spirv/cfg: Handle discard
Jason Ekstrand [Wed, 30 Dec 2015 00:57:21 +0000 (16:57 -0800)]
nir/print: Handle variables with var->name == NULL
Jason Ekstrand [Wed, 30 Dec 2015 00:57:01 +0000 (16:57 -0800)]
nir/inline_functions: Switch to inlining everything
Kenneth Graunke [Wed, 30 Dec 2015 00:06:19 +0000 (16:06 -0800)]
nir/spirv/glsl450: Enumerate more built-in opcodes.
Kenneth Graunke [Tue, 29 Dec 2015 23:50:15 +0000 (15:50 -0800)]
anv/state: Fix reversed MIN vs. MAX in levelCount handling.
The point is to promote a levelCount of 0 to 1 before subtracting 1.
This needs MAX, not MIN.
Jason Ekstrand [Tue, 29 Dec 2015 23:44:37 +0000 (15:44 -0800)]
nir/spirv: Use instr_rewrite_src for updating phi sources
You can't just add a new source to a phi because use/def information won't
get updated properly. Instead, you have to use one of the core helpers.
Some day, we may want to add a nir_phi_instr_add_src helper.
Jason Ekstrand [Tue, 29 Dec 2015 23:35:29 +0000 (15:35 -0800)]
nir/validate: Don't validate the return deref for void function calls
Jason Ekstrand [Tue, 29 Dec 2015 23:25:43 +0000 (15:25 -0800)]
nir/dominance: Handle unreachable blocks
Previously, nir_dominance.c didn't properly handle unreachable blocks.
This can happen if, for instance, you have something like this:
loop {
if (...) {
break;
} else {
break;
}
}
In this case, the block right after the if statement will be unreachable.
This commit makes two changes to handle this. First, it removes an assert
and allows block->imm_dom to be null if the block is unreachable. Second,
it properly skips unreachable blocks in calc_dom_frontier_cb.
Kenneth Graunke [Tue, 29 Dec 2015 23:13:46 +0000 (15:13 -0800)]
nir/spirv/glsl450: Implement inverse hyperbolic trig built-ins.
Kenneth Graunke [Tue, 29 Dec 2015 08:28:42 +0000 (00:28 -0800)]
nir/spirv/glsl450: Implement Refract built-in.
Kenneth Graunke [Tue, 29 Dec 2015 08:18:54 +0000 (00:18 -0800)]
nir/spirv/glsl450: Implement hyperbolic trig built-ins.
Kenneth Graunke [Tue, 29 Dec 2015 08:10:39 +0000 (00:10 -0800)]
nir/spirv/glsl450: implement Reflect built-in.
Kenneth Graunke [Tue, 29 Dec 2015 07:59:32 +0000 (23:59 -0800)]
nir/spirv/glsl450: Implement FaceForward built-in.
Kenneth Graunke [Tue, 29 Dec 2015 07:52:10 +0000 (23:52 -0800)]
nir/spirv/glsl450: Implement SmoothStep.
Kenneth Graunke [Tue, 29 Dec 2015 07:39:14 +0000 (23:39 -0800)]
nir/spirv/glsl450: Implement Cross built-in.
Kenneth Graunke [Tue, 29 Dec 2015 04:40:10 +0000 (20:40 -0800)]
nir/spirv/glsl450: Implement Clamp/SClamp/UClamp.
Kenneth Graunke [Tue, 29 Dec 2015 05:21:51 +0000 (21:21 -0800)]
nir/spirv/glsl450: Implement the Log built-in.
Kenneth Graunke [Tue, 29 Dec 2015 05:04:30 +0000 (21:04 -0800)]
nir/spirv/glsl450: Implement Exp built-in.
Kenneth Graunke [Tue, 29 Dec 2015 23:18:05 +0000 (15:18 -0800)]
nir/spirv/glsl450: Add a helper for doing fclamp().
Kenneth Graunke [Tue, 29 Dec 2015 23:15:05 +0000 (15:15 -0800)]
nir/spirv/glsl450: Add helpers for calculating exp() and log().