mesa.git
8 years agoanv: Fix warning 3DSTATE_VERTEX_ELEMENTS setup
Kristian Høgsberg Kristensen [Sun, 14 Feb 2016 22:17:08 +0000 (14:17 -0800)]
anv: Fix warning 3DSTATE_VERTEX_ELEMENTS setup

This is a little more subtle. If elem_count is 0, nothing else happens
in this function, so we return early to avoid warning about
uninitialized 'p'.

8 years agoanv: Fix misc simple warnings
Kristian Høgsberg Kristensen [Sun, 14 Feb 2016 21:20:06 +0000 (13:20 -0800)]
anv: Fix misc simple warnings

8 years agoanv/meta_resolve: Set origin_upper_left on gl_FragCoord
Jason Ekstrand [Mon, 15 Feb 2016 20:44:39 +0000 (12:44 -0800)]
anv/meta_resolve: Set origin_upper_left on gl_FragCoord

It's required by the spec and any shaders that don't set it will be broken.
I'm not really sure how multisampling was even working before...

8 years agonir: Get rid of the C++ NIR_SRC/DEST_INIT macros
Jason Ekstrand [Sat, 13 Feb 2016 05:34:59 +0000 (21:34 -0800)]
nir: Get rid of the C++ NIR_SRC/DEST_INIT macros

These were originally added to reduce compiler warnings but aren't really
needed.  Getting rid of them reduces the diff between the Vulkan branch and
master, so we might as well.

8 years agoanv: Disable snooping for allocator pools again
Kristian Høgsberg Kristensen [Fri, 12 Feb 2016 23:10:22 +0000 (15:10 -0800)]
anv: Disable snooping for allocator pools again

The race we were seeing on cherryview was caused by the multi-submit
problem with fences. We can now turn snooping off again an rely on
clflush and we intended.

8 years agoanv: Submit fence bo only after all command buffers
Kristian Høgsberg Kristensen [Fri, 12 Feb 2016 23:08:09 +0000 (15:08 -0800)]
anv: Submit fence bo only after all command buffers

We were submitting the fence bo after each command buffer in a multi
command buffer submit, causing us to occasionally complete the fence too
early.

8 years agoanv: Implement VkPipelineCache
Kristian Høgsberg Kristensen [Wed, 10 Feb 2016 17:43:03 +0000 (09:43 -0800)]
anv: Implement VkPipelineCache

We hash the input SPIR-V, specialization constants, entrypoint and the
shader key using SHA1 to determine a unique identifier for the
combination. A VkPipelineCache is then a hash table mapping these
identifiers to the corresponding prog_data and kernel data.

8 years agoanv/meta_blit: Remove references to clearing
Chad Versace [Fri, 12 Feb 2016 19:27:19 +0000 (11:27 -0800)]
anv/meta_blit: Remove references to clearing

Long ago, the blit code used to handle clearing and blitting.

- Fix any comments that refer to clearing.
- Rename shader var 'attr' to 'tex_pos'. The name 'attr' is an artifact
  of the time when the shader was used for blitting as well as clearing.

8 years agoanv/meta_blit: Coalesce glsl_vec4_type vars
Chad Versace [Fri, 12 Feb 2016 18:27:58 +0000 (10:27 -0800)]
anv/meta_blit: Coalesce glsl_vec4_type vars

Just a refactor. No behavior change.

Several expressions have the same value: they point to
glsl_vec4_type(). Coalesce them into a single variable.

8 years agoanv/device: clflush simple batches if !LLC
Jason Ekstrand [Fri, 12 Feb 2016 19:00:42 +0000 (11:00 -0800)]
anv/device: clflush simple batches if !LLC

8 years agoanv: Add a clfush_range helper function
Jason Ekstrand [Fri, 12 Feb 2016 19:00:08 +0000 (11:00 -0800)]
anv: Add a clfush_range helper function

8 years agonir/spirv/glsl: Clean up the row-skipping swizzle logic a bit
Jason Ekstrand [Fri, 12 Feb 2016 18:40:24 +0000 (10:40 -0800)]
nir/spirv/glsl: Clean up the row-skipping swizzle logic a bit

8 years agoanv/meta: Move blit code to anv_meta_blit.c
Chad Versace [Fri, 12 Feb 2016 17:55:32 +0000 (09:55 -0800)]
anv/meta: Move blit code to anv_meta_blit.c

The clear code lived in anv_meta_clear.c. The resolve code in
anv_meta_resolve.c. Only the blit code lived in anv_meta.c, alongside
the shareed meta code.

This is just a copy-paste patch. No change in behavior.

8 years agoanv/meta: Hardcode smooth texcoord interpolation in blit shaders
Chad Versace [Wed, 10 Feb 2016 21:36:56 +0000 (13:36 -0800)]
anv/meta: Hardcode smooth texcoord interpolation in blit shaders

Trivial cleanup. No change in behavior.

Function argument 'attr_flat', in anv_meta.c:build_nir_vertex_shader(),
was always false.

8 years agoanv/device: Use a normal BO in submit_simple_batch
Jason Ekstrand [Fri, 12 Feb 2016 02:41:04 +0000 (18:41 -0800)]
anv/device: Use a normal BO in submit_simple_batch

8 years agoanv: Add a vk_icdGetInstanceProcAddr entrypoint
Jason Ekstrand [Fri, 12 Feb 2016 05:18:02 +0000 (21:18 -0800)]
anv: Add a vk_icdGetInstanceProcAddr entrypoint

Aparently there are some issues in symbol resolution if an application
packages its own loader and you have a system-installed one.  I don't
really understand the details, but it's not onorous to add.

8 years agoanv/event: Use a 64-bit value
Jason Ekstrand [Fri, 12 Feb 2016 02:57:37 +0000 (18:57 -0800)]
anv/event: Use a 64-bit value

The immediate write from PIPE_CONTROL is 64-bits at least on BDW.  This
used to work on 64-bit archs because the compiler would align the following
anv_state struct up for us.  However, in 32-bit builds, they overlap and it
causes problems.

8 years agogen8/pipeline: Properly set bits in PS_EXTRA for W, depth, and samaple mask
Jason Ekstrand [Thu, 11 Feb 2016 02:07:55 +0000 (18:07 -0800)]
gen8/pipeline: Properly set bits in PS_EXTRA for W, depth, and samaple mask

8 years agonir/spirv: Allow the clip distance capability.
Jason Ekstrand [Thu, 11 Feb 2016 22:27:15 +0000 (14:27 -0800)]
nir/spirv: Allow the clip distance capability.

8 years agogen8/pipeline: Pull gs_vertex_count from prog_data
Jason Ekstrand [Thu, 11 Feb 2016 23:11:38 +0000 (15:11 -0800)]
gen8/pipeline: Pull gs_vertex_count from prog_data

8 years agoMerge remote-tracking branch 'mesa-public/master' into vulkan
Jason Ekstrand [Thu, 11 Feb 2016 23:09:30 +0000 (15:09 -0800)]
Merge remote-tracking branch 'mesa-public/master' into vulkan

8 years agoi965/gs: Pass VerticesIn though prog_data
Jason Ekstrand [Thu, 11 Feb 2016 05:57:52 +0000 (21:57 -0800)]
i965/gs: Pass VerticesIn though prog_data

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: Pass usage of depth, W, and sample mask through prog_data
Jason Ekstrand [Thu, 11 Feb 2016 05:27:57 +0000 (21:27 -0800)]
i965/fs: Pass usage of depth, W, and sample mask through prog_data

We really need to stop pulling information directly out of shaders for
state setup.  For one thing, if we want any sort of an on-disk shader
cache, having all of this metadata in one place is going to be crucial.
Also, passing it all through prog_data cleans up the compiler <-> state
setup API substantially.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: Refactor setup_payload_gen6 to assume FS
Jason Ekstrand [Thu, 11 Feb 2016 05:20:01 +0000 (21:20 -0800)]
i965/fs: Refactor setup_payload_gen6 to assume FS

It's extremely FS specific so the fact that we have a stage check in the
middle of it is rather bogus.  While were here, we rename
setup_payload_gen4 and setup_payload_gen6 to make it obvious that they are
both FS specific.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agonv50,nvc0: remove unused parameter in nvXX_state_validate()
Samuel Pitoiset [Thu, 11 Feb 2016 22:05:04 +0000 (23:05 +0100)]
nv50,nvc0: remove unused parameter in nvXX_state_validate()

This 'words' parameter is there since 2011 but it has never been used.
While we are at it, get rid of the extern declaration.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
8 years agoglsl: don't validate interface blocks twice
Timothy Arceri [Thu, 11 Feb 2016 04:14:21 +0000 (15:14 +1100)]
glsl: don't validate interface blocks twice

We already check for opaque types so don't recheck for atomics
and images.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
8 years agoglsl: remove duplicate embedded struct validation
Timothy Arceri [Thu, 11 Feb 2016 04:45:05 +0000 (15:45 +1100)]
glsl: remove duplicate embedded struct validation

Commit c98deb18d5836f in 2010 disallowed embedded struct definitions
in ES. Then in 2013 d9bb8b7b56ce65b disallowed it for everything but
GLSL 1.10.

Commit c98deb18d5836f seemed the cleanest way to do the check so its
been extended to cover GL and the other version has been removed.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
8 years agoinclude,gallium: Remove pre-MSVC 2013 compatibility.
Jose Fonseca [Thu, 11 Feb 2016 11:36:17 +0000 (11:36 +0000)]
include,gallium: Remove pre-MSVC 2013 compatibility.

Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
8 years agoscons: Eliminate MSVC2008 compatibility.
Jose Fonseca [Thu, 11 Feb 2016 11:07:49 +0000 (11:07 +0000)]
scons: Eliminate MSVC2008 compatibility.

Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
8 years agoconfigure: Eliminate MSVC2008 compatibility.
Jose Fonseca [Thu, 11 Feb 2016 11:07:33 +0000 (11:07 +0000)]
configure: Eliminate MSVC2008 compatibility.

We no longer need to build any part of Mesa with Windows SDK 7.0.7600 or
MSVC 2008.  MSVC 2013 will be the oldest we support.

In practice this means people are now free to declare variables in the
middle of blocks, on the whole Mesa tree.

Care should still be taken with variable length arrays and void pointer
arithmetic.

Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Hella-acked-by: Ian Romanick <ian.d.romanick@intel.com>
8 years agoi965: ir: dump floats as %-g rather than %f, so we can see denormals
Chris Forbes [Thu, 11 Feb 2016 06:03:56 +0000 (19:03 +1300)]
i965: ir: dump floats as %-g rather than %f, so we can see denormals

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Ben Widawsky <benjamin.widawsky@intel.com>
8 years agoi965/gen7: Require kernel cmd_parser 5 for ARB_compute_shader
Jordan Justen [Wed, 10 Feb 2016 17:56:23 +0000 (09:56 -0800)]
i965/gen7: Require kernel cmd_parser 5 for ARB_compute_shader

The indirect dispatch registers were whitelisted in command parser
version 5. (Version 5 is available as of Linux 4.4)

Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agost/mesa: release GLSL IR in LinkShader after it's not needed
Marek Olšák [Mon, 5 Oct 2015 21:18:18 +0000 (23:18 +0200)]
st/mesa: release GLSL IR in LinkShader after it's not needed

Reviewed-by: Brian Paul <brianp@vmware.com>
8 years agomesa: call build_program_resource_list inside Driver.LinkShader
Marek Olšák [Mon, 5 Oct 2015 21:15:59 +0000 (23:15 +0200)]
mesa: call build_program_resource_list inside Driver.LinkShader

to allow LinkShader to free the GLSL IR.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
8 years agost/mesa: use correct pipe functions to create tess shaders
Marek Olšák [Thu, 11 Feb 2016 15:40:54 +0000 (16:40 +0100)]
st/mesa: use correct pipe functions to create tess shaders

Broken by one of my cleanups. Spotted by luck.

Radeonsi doesn't care, because all shader create callbacks go to the same
function.

Reviewed-by: Brian Paul <brianp@vmware.com>
8 years agogallium/radeon: drop support for LLVM 3.5
Marek Olšák [Wed, 10 Feb 2016 20:48:59 +0000 (21:48 +0100)]
gallium/radeon: drop support for LLVM 3.5

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
v2: adjust the comment in the amdgpu winsys

8 years agoradeonsi: obtain commonly used LLVM types only once
Marek Olšák [Wed, 10 Feb 2016 20:27:55 +0000 (21:27 +0100)]
radeonsi: obtain commonly used LLVM types only once

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: cleanup shader codegen
Marek Olšák [Wed, 10 Feb 2016 19:31:26 +0000 (20:31 +0100)]
radeonsi: cleanup shader codegen

si_shader_ctx -> ctx
type * ptr -> type *ptr
si_shader_context *shader -> si_shader_context *ctx

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: fix a crash when binding a sampler buffer
Marek Olšák [Thu, 11 Feb 2016 14:49:51 +0000 (15:49 +0100)]
radeonsi: fix a crash when binding a sampler buffer

Buffers don't contain r600_texture.

Broken by 7aedbbacae6d3ec3d06735fff2eb66:
"radeonsi: put image, fmask, and sampler descriptors into one array"

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94091

8 years agoanv/pack: Handle case where a struct field covers multiple dwords
Kristian Høgsberg Kristensen [Thu, 11 Feb 2016 05:42:56 +0000 (21:42 -0800)]
anv/pack: Handle case where a struct field covers multiple dwords

We also didn't add start to field.end to get the absolute field end
position.

8 years agodocs: add news item and link release notes for 11.1.2
Emil Velikov [Thu, 11 Feb 2016 01:47:07 +0000 (01:47 +0000)]
docs: add news item and link release notes for 11.1.2

Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
8 years agodocs: add sha256 checksums for 11.1.2
Emil Velikov [Thu, 11 Feb 2016 01:21:31 +0000 (01:21 +0000)]
docs: add sha256 checksums for 11.1.2

Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
(cherry picked from commit e49dd21bcbabdb330620d48f5915828cfd5eb983)

8 years agodocs: add release notes for 11.1.2
Emil Velikov [Thu, 11 Feb 2016 00:03:22 +0000 (00:03 +0000)]
docs: add release notes for 11.1.2

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
(cherry picked from commit 7bcd827806b0816d61122ba3d37dd40178d96d98)

8 years agoMerge remote-tracking branch 'mesa-public/master' into vulkan
Jason Ekstrand [Thu, 11 Feb 2016 01:10:19 +0000 (17:10 -0800)]
Merge remote-tracking branch 'mesa-public/master' into vulkan

This also reverts commit 1d65abfa582a371558113f699ffbf16d60b64c90 because
now NIR handles texture offsets in a much more sane way.

8 years agoMerge commit '85f5c18fef1ff2f19d698f150e23a02acd6f59b9' into vulkan
Jason Ekstrand [Thu, 11 Feb 2016 00:49:41 +0000 (16:49 -0800)]
Merge commit '85f5c18fef1ff2f19d698f150e23a02acd6f59b9' into vulkan

8 years agoanv: Handle dwords that are all MBZ correctly
Kristian Høgsberg Kristensen [Thu, 11 Feb 2016 00:35:28 +0000 (16:35 -0800)]
anv: Handle dwords that are all MBZ correctly

A few packets have dwords in them that are all MBZ and we failed to
write those. This change makes sure we iterate through all dwords and
write them all.

8 years agonir: Remove the const_offset from nir_tex_instr
Jason Ekstrand [Tue, 9 Feb 2016 22:51:28 +0000 (14:51 -0800)]
nir: Remove the const_offset from nir_tex_instr

When NIR was originally drafted, there was no easy way to determine if
something was constant or not.  The result was that we had lots of
special-casing for constant values such as this.  Now that load_const
instructions are SSA-only, it's really easy to find constants and this
isn't really needed anymore.

Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
Reviewed-by: Rob Clark <robclark@gmail.com>
8 years agonir/lower_vec_to_movs: Better report channels handled by insert_mov
Jason Ekstrand [Wed, 10 Feb 2016 20:07:49 +0000 (12:07 -0800)]
nir/lower_vec_to_movs: Better report channels handled by insert_mov

This fixes two issues.  First, we had a use-after-free in the case where
the instruction got deleted and we tried to return mov->dest.write_mask.
Second, in the case where we are doing a self-mov of a register, we delete
those channels that are moved to themselves from the write-mask.  This
means that those channels aren't reported as being handled even though they
are.  We now stash off the write-mask before remove unneeded channels so
that they still get reported as handled.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94073
Reviewed-by: Matt Turner <mattst88@gmail.com>
Cc: "11.0 11.1" <mesa-stable@lists.freedesktop.org>
8 years agoanv: Fix out-of-tree build
Kristian Høgsberg Kristensen [Wed, 10 Feb 2016 23:52:29 +0000 (15:52 -0800)]
anv: Fix out-of-tree build

We need to be able to find the generated nir_opcodes.h header.

8 years agonir: Fix out-of-tree build for spirv2nir
Kristian Høgsberg Kristensen [Wed, 10 Feb 2016 23:49:25 +0000 (15:49 -0800)]
nir: Fix out-of-tree build for spirv2nir

This needs to be able to find the generated nir_opcodes.h header.

8 years agonir/spirv: Fix handling of OpGroupMemberDecorate
Jason Ekstrand [Wed, 10 Feb 2016 23:35:34 +0000 (15:35 -0800)]
nir/spirv: Fix handling of OpGroupMemberDecorate

We were pulling the member index from the wrong dword

8 years agonir/spirv: Assert that struct member ids are in-bounds
Jason Ekstrand [Wed, 10 Feb 2016 23:34:35 +0000 (15:34 -0800)]
nir/spirv: Assert that struct member ids are in-bounds

8 years agoradeonsi: don't emit unnecessary NULL exports for unbound targets (v3)
Marek Olšák [Sun, 24 Jan 2016 00:06:07 +0000 (01:06 +0100)]
radeonsi: don't emit unnecessary NULL exports for unbound targets (v3)

v2: remove semantic index == 0 checks
    add the else statement to remove shadowing of args
v3: fix fbo-alphatest-nocolor regression

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com> (v2)
8 years agonir/spirv: fix build_mat_subdet stack smasher
Mark Janes [Wed, 10 Feb 2016 21:41:27 +0000 (13:41 -0800)]
nir/spirv: fix build_mat_subdet stack smasher

The sub-determinate implementation pattern fixed by
6a7e2904e0a2a6f8efbf739a1b3cad7e1e4ab42d has a second instance in the
same file.

With the previous algorithm, when row and j are both 3, the index
overruns the array.  This only impacts the stack on 32 bit builds.

Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
8 years agoanv: Generate pack headers from XML definition
Kristian Høgsberg Kristensen [Tue, 9 Feb 2016 00:21:09 +0000 (16:21 -0800)]
anv: Generate pack headers from XML definition

This huge commit switches us over to using a simple xml format (genxml)
for defining our command streamer commands and a python script for
generating the pack headers we use in the driver.

8 years agoi965: Make sure we blit a full compressed block
Ben Widawsky [Sun, 7 Feb 2016 02:11:21 +0000 (18:11 -0800)]
i965: Make sure we blit a full compressed block

This fixes an assertion failure in [at least] one of the Unreal Engine Linux
demo/games that uses DXT1 compression. Specifically, the "Vehicle Game".

At some point, the game ends up trying to blit mip level whose size is 2x2,
which is smaller than a DXT1 block. As a result, the assertion in the blit path
is triggered. It should be safe to simply make sure we align the width and
height, which is sadly an example of compression being less efficient.

NOTE: The demo seems to work fine without the assert, and therefore release
builds of mesa wouldn't stumble over this. Perhaps there is some unnoticeable
corruption, but I had trouble spotting it.

Thanks to Jason for looking at my backtrace and figuring out what was going on.

v2: Use NPOT alignment to make sure ASTC is handled properly (Ilia)
Remove comment about how this doesn't fix other bugs, because it does.

Cc: "11.0 11.1" <mesa-stable@lists.freedesktop.org
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93358
Signed-off-by: Ben Widawsky <benjamin.widawsky@intel.com>
Tested-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
8 years agoradeon/uvd: silence a warning
Marek Olšák [Wed, 10 Feb 2016 19:15:07 +0000 (20:15 +0100)]
radeon/uvd: silence a warning

8 years agor300g: silence warnings
Marek Olšák [Wed, 10 Feb 2016 19:14:53 +0000 (20:14 +0100)]
r300g: silence warnings

8 years agometa/decompress: Don't pollute the renderbuffer namespace
Ian Romanick [Thu, 12 Nov 2015 17:37:27 +0000 (09:37 -0800)]
meta/decompress: Don't pollute the renderbuffer namespace

tl;dr: For many types of GL object, we can *NEVER* use the Gen function.

In OpenGL ES (all versions!) and OpenGL compatibility profile,
applications don't have to call Gen functions.  The GL spec is very
clear about how you can mix-and-match generated names and non-generated
names: you can use any name you want for a particular object type until
you call the Gen function for that object type.

Here's the problem scenario:

 - Application calls a meta function that generates a name.  The first
   Gen will probably return 1.

 - Application decides to use the same name for an object of the same
   type without calling Gen.  Many demo programs use names 1, 2, 3,
   etc. without calling Gen.

 - Application calls the meta function again, and the meta function
   replaces the data.  The application's data is lost, and the app
   fails.  Have fun debugging that.

Fixes piglit 'object-namespace-pollution glGetTexImage-compressed
renderbuffer' test.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92363
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
8 years agometa: Use internal functions for renderbuffer access
Ian Romanick [Thu, 12 Nov 2015 17:29:34 +0000 (09:29 -0800)]
meta: Use internal functions for renderbuffer access

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
8 years agometa/decompress: Track renderbuffer using gl_renderbuffer instead of GL API object...
Ian Romanick [Thu, 12 Nov 2015 17:26:41 +0000 (09:26 -0800)]
meta/decompress: Track renderbuffer using gl_renderbuffer instead of GL API object handle

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
8 years agoi965/meta: Don't pollute the renderbuffer namespace
Ian Romanick [Thu, 12 Nov 2015 02:05:09 +0000 (18:05 -0800)]
i965/meta: Don't pollute the renderbuffer namespace

tl;dr: For many types of GL object, we can *NEVER* use the Gen function.

In OpenGL ES (all versions!) and OpenGL compatibility profile,
applications don't have to call Gen functions.  The GL spec is very
clear about how you can mix-and-match generated names and non-generated
names: you can use any name you want for a particular object type until
you call the Gen function for that object type.

Here's the problem scenario:

 - Application calls a meta function that generates a name.  The first
   Gen will probably return 1.

 - Application decides to use the same name for an object of the same
   type without calling Gen.  Many demo programs use names 1, 2, 3,
   etc. without calling Gen.

 - Application calls the meta function again, and the meta function
   replaces the data.  The application's data is lost, and the app
   fails.  Have fun debugging that.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92363
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
8 years agoi965/meta: Use internal functions for renderbuffer access
Ian Romanick [Thu, 12 Nov 2015 00:35:05 +0000 (16:35 -0800)]
i965/meta: Use internal functions for renderbuffer access

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
8 years agoi965/meta: Return struct gl_renderbuffer* from brw_get_rb_for_slice instead of GL...
Ian Romanick [Wed, 11 Nov 2015 23:57:25 +0000 (15:57 -0800)]
i965/meta: Return struct gl_renderbuffer* from brw_get_rb_for_slice instead of GL API handle

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
8 years agometa: Don't save or restore the renderbuffer binding
Ian Romanick [Wed, 11 Nov 2015 22:34:11 +0000 (14:34 -0800)]
meta: Don't save or restore the renderbuffer binding

Nothing left in meta does anything with the RBO binding, so we don't
need to save or restore it.  The FBO binding is still modified.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
8 years agometa: Use _mesa_CreateRenderbuffers instead of _mesa_GenRenderbuffers and _mesa_BindR...
Ian Romanick [Wed, 11 Nov 2015 22:33:30 +0000 (14:33 -0800)]
meta: Use _mesa_CreateRenderbuffers instead of _mesa_GenRenderbuffers and _mesa_BindRenderbuffer

This has the advantage that it does not pollute the global binding
state.  It also enables later patches that will stop calling
_mesa_GenRenderbuffers / _mesa_CreateRenderbuffers which pollute the
renderbuffer namespace.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
8 years agoi965/meta: Use _mesa_CreateRenderbuffers instead of _mesa_GenRenderbuffers and _mesa_...
Ian Romanick [Wed, 11 Nov 2015 22:29:18 +0000 (14:29 -0800)]
i965/meta: Use _mesa_CreateRenderbuffers instead of _mesa_GenRenderbuffers and _mesa_BindRenderbuffer

This has the advantage that it does not pollute the global binding
state.  It also enables later patches that will stop calling
_mesa_GenRenderbuffers / _mesa_CreateRenderbuffers which pollute the
renderbuffer namespace.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
8 years agomesa: Refactor renderbuffer_storage to make _mesa_renderbuffer_storage
Ian Romanick [Thu, 12 Nov 2015 17:11:20 +0000 (09:11 -0800)]
mesa: Refactor renderbuffer_storage to make _mesa_renderbuffer_storage

Pulls the parts of renderbuffer_storage that aren't just parameter
validation out into a function that can be called from other parts of
Mesa (e.g., meta).

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
8 years agomesa: Refactor _mesa_framebuffer_renderbuffer
Ian Romanick [Thu, 12 Nov 2015 00:30:41 +0000 (16:30 -0800)]
mesa: Refactor _mesa_framebuffer_renderbuffer

This function previously was only used in fbobject.c and contained a
bunch of API validation.  Split the function into
framebuffer_renderbuffer that is static and contains the validation, and
_mesa_framebuffer_renderbuffer that is suitable for calling from
elsewhere in Mesa (e.g., meta).

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
8 years agoradeonsi: put image, fmask, and sampler descriptors into one array
Marek Olšák [Sat, 6 Feb 2016 21:09:45 +0000 (22:09 +0100)]
radeonsi: put image, fmask, and sampler descriptors into one array

The texture slot is expanded to 16 dwords containing 2 descriptors.
Those can be:
- Image and fmask, or
- Image and sampler state

By carefully choosing the locations, we can put all three into one slot,
with the fmask and sampler state being mutually exclusive.

This improves shaders in 2 ways:
- 2 user SGPRs are unused, shaders can use them as temporary registers now
- each pair of descriptors is always on the same cache line

v2: cosmetic changes: add back v8i32, don't load a sampler state & fmask
    at the same time

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agowinsys/radeon: fix the num_tile_pipes comment to silence warnings
Marek Olšák [Wed, 10 Feb 2016 18:41:37 +0000 (19:41 +0100)]
winsys/radeon: fix the num_tile_pipes comment to silence warnings

8 years agowinsys/radeon: better explain the num_tile_pipes fixup for TAHITI (v2)
Alexandre Demers [Wed, 10 Feb 2016 14:45:46 +0000 (09:45 -0500)]
winsys/radeon: better explain the num_tile_pipes fixup for TAHITI (v2)

v2: Clarify the relation between num_tiles_pipes and GB_TILE_MODE and the fix
 needed for Tahiti as suggested by Marek.

Signed-off-by: Alexandre Demers <alexandre.f.demers@gmail.com>
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
8 years agost/mesa: check ureg_create() retval in create_pbo_upload_vs()
Samuel Pitoiset [Tue, 9 Feb 2016 10:40:08 +0000 (11:40 +0100)]
st/mesa: check ureg_create() retval in create_pbo_upload_vs()

This avoids a possible NULL dereference because ureg_create() might
return a NULL pointer.

Spotted by coverity.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agofreedreno/ir3: Get rid of nested functions
Bernhard Rosenkränzer [Wed, 10 Feb 2016 16:19:46 +0000 (17:19 +0100)]
freedreno/ir3: Get rid of nested functions

This allows building Freedreno with clang

Signed-off-by: Bernhard Rosenkränzer <bero@linaro.org>
Signed-off-by: Rob Clark <robclark@freedesktop.org>
8 years agoi965/blorp: Fix hiz ops on MSAA surfaces
Chris Forbes [Tue, 18 Nov 2014 08:49:53 +0000 (21:49 +1300)]
i965/blorp: Fix hiz ops on MSAA surfaces

Two things were broken here:
- The depth/stencil surface dimensions were broken for MSAA.
- Sample count was programmed incorrectly.

Result was the depth resolve didn't work correctly on MSAA surfaces, and
so sampling the surface later produced garbage.

Fixes the new piglit test arb_texture_multisample-sample-depth, and
various artifacts in 'tesseract' with msaa=4 glineardepth=0.

Fixes freedesktop bug #76396.

Not observed any piglit regressions on Haswell.

v2: Just set brw_hiz_op_params::dst.num_samples rather than adding a
    helper function (Ken).

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
v3: moved the alignment needed for hiz+msaa to brw_blorp.cpp, as
    suggested by Chad Versace (Alejandro Piñeiro on behalf of Chris
    Forbes)

Signed-off-by: Alejandro Piñeiro <apinheiro@igalia.com>
Reviewed-by: Ben Widawsky <benjamin.widawsky@intel.com>
Tested-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
8 years agoi965/gen8: Remove dead assertion
Topi Pohjolainen [Sun, 3 Jan 2016 13:06:09 +0000 (15:06 +0200)]
i965/gen8: Remove dead assertion

The assertion is inside a condition mandating num_samples > 1 and
therefore the first half of the constraint is always met. The
second half in turn would only be applicable for single sampled
case and moreover it is trying to falsely check against surface
type instead of format.
Subsequent patches will introduce proper support for the lossless
compression and dropping this here makes the patches a little
simpler.

Signed-off-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
Reviewed-by: Ben Widawsky <benjamin.widawsky@intel.com>
8 years agoi965: Use constant pointer when checking for compression
Topi Pohjolainen [Mon, 7 Dec 2015 19:58:33 +0000 (21:58 +0200)]
i965: Use constant pointer when checking for compression

Signed-off-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
Reviewed-by: Ben Widawsky <benjamin.widawsky@intel.com>
8 years agomesa: fix trivial comment typo in dlist.c
Brian Paul [Wed, 10 Feb 2016 03:09:26 +0000 (20:09 -0700)]
mesa: fix trivial comment typo in dlist.c

8 years agoi965/vec4: Drop support for ATTR as an instruction destination.
Kenneth Graunke [Thu, 14 Jan 2016 04:33:17 +0000 (20:33 -0800)]
i965/vec4: Drop support for ATTR as an instruction destination.

This is no longer necessary...and it doesn't make much sense to
have inputs as destinations.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
8 years agoi965/vec4/gs: Stop munging the ATTR containing gl_PointSize.
Kenneth Graunke [Thu, 14 Jan 2016 04:33:16 +0000 (20:33 -0800)]
i965/vec4/gs: Stop munging the ATTR containing gl_PointSize.

gl_PointSize is delivered in the .w component of the VUE header, while
the language expects it to be a float (and thus in the .x component).

Previously, we emitted MOVs to copy it over to the .x component.
But this is silly - we can just use a .wwww swizzle and access it
without copying anything or clobbering the value stored at .x
(which admittedly is useless).

Removes the last use of ATTR destinations.

v2: Use BRW_SWIZZLE_WWWW, not SWIZZLE_WWWW (caught by GCC).

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
8 years agoi965: Apply VS attribute workarounds in NIR.
Kenneth Graunke [Thu, 14 Jan 2016 04:33:15 +0000 (20:33 -0800)]
i965: Apply VS attribute workarounds in NIR.

This patch re-implements the pre-Haswell VS attribute workarounds.
Instead of emitting shader code in the vec4 backend, we now simply
call a NIR pass to emit the necessary code.

This simplifies the vec4 backend.  Beyond deleting code, it removes
the primary use of ATTR as a destination.  It also eliminates the
requirement that the vec4 VS backend express the ATTR file in terms
of VERT_ATTRIB_* locations, giving us a bit more flexibility.

This approach is a little different: rather than munging the attributes
at the top, we emit code to fix them up when they're accessed.  However,
we run the optimizer afterwards, so CSE should eliminate the redundant
math.  It may even be able to fuse it with other calculations based on
the input value.

shader-db does not handle non-default NOS settings, so I have no
statistics about this patch.

Note that the scalar backend does not implement VS attribute
workarounds, as they are unnecessary on hardware which allows SIMD8 VS.

v2: Do one multiply for FIXED rescaling and select components from
    either the original or scaled copy, rather than multiplying each
    component separately (suggested by Matt Turner).

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
8 years agoanv: Fix up spirv for new texture/sampler split stuff
Jason Ekstrand [Tue, 9 Feb 2016 20:13:32 +0000 (12:13 -0800)]
anv: Fix up spirv for new texture/sampler split stuff

8 years agost/mesa: clarify some texture target code in st_cb_drawpix.c
Brian Paul [Tue, 9 Feb 2016 21:44:54 +0000 (14:44 -0700)]
st/mesa: clarify some texture target code in st_cb_drawpix.c

Use st->internal_target instead of PIPE_TEXTURE_2D when choosing the
texture format.  Probably no real difference, but let's be consistent.

Simplify a test when determining whether we need normalized texcoords.

Add a new assertion.

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
8 years agost/mesa: fix bitmap texture target code and simplify tex sampler state
Brian Paul [Tue, 9 Feb 2016 21:35:31 +0000 (14:35 -0700)]
st/mesa: fix bitmap texture target code and simplify tex sampler state

Bitmaps may be drawn with a PIPE_TEXTURE_2D or PIPE_TEXTURE_RECT resource
as determined at context creation by checking if PIPE_CAP_NPOT_TEXTURES is
supported.  But many places in the bitmap code were hard-coded to use
PIPE_TEXTURE_2D.  Use st->internal_target instead.

I think an older NV chip is the only case where a gallium driver does not
support NPOT textures.  Bitmap drawing was probably broken for that GPU.

Also, we only need one sampler state with texcoord normalization set up
according to st->internal_target.

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
8 years agost/mesa: use MAX3() macro, as we do for sampler view code below
Brian Paul [Tue, 9 Feb 2016 21:20:41 +0000 (14:20 -0700)]
st/mesa: use MAX3() macro, as we do for sampler view code below

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
8 years agost/mesa: move some st_cb_drawpixels.c code, add comments
Brian Paul [Tue, 9 Feb 2016 21:19:25 +0000 (14:19 -0700)]
st/mesa: move some st_cb_drawpixels.c code, add comments

8 years agoMerge remote-tracking branch 'mesa-public/master' into vulkan
Jason Ekstrand [Wed, 10 Feb 2016 00:47:37 +0000 (16:47 -0800)]
Merge remote-tracking branch 'mesa-public/master' into vulkan

This pulls in the separate texture/sampler stuff from upstream

8 years agovtn: Use const_index helpers
Jason Ekstrand [Tue, 9 Feb 2016 23:35:51 +0000 (15:35 -0800)]
vtn: Use const_index helpers

8 years agoanv/apply_pipeline_layout: Use the new const_index helpers
Jason Ekstrand [Tue, 9 Feb 2016 23:32:21 +0000 (15:32 -0800)]
anv/apply_pipeline_layout: Use the new const_index helpers

8 years agoMerge commit '8b0fb1c152fe191768953aa8c77b89034a377f83' into vulkan
Jason Ekstrand [Tue, 9 Feb 2016 23:30:39 +0000 (15:30 -0800)]
Merge commit '8b0fb1c152fe191768953aa8c77b89034a377f83' into vulkan

This pulls in Rob Clark's const_index changes for NIR

8 years agomesa/readpix: Dedent former _mesa_readpixels() if block
Nanley Chery [Sat, 6 Feb 2016 00:25:28 +0000 (16:25 -0800)]
mesa/readpix: Dedent former _mesa_readpixels() if block

Formatting patch split out for easy reviewing.

Signed-off-by: Nanley Chery <nanley.g.chery@intel.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
8 years agomesa/readpix: Don't clip in _mesa_readpixels()
Nanley Chery [Sat, 6 Feb 2016 00:25:01 +0000 (16:25 -0800)]
mesa/readpix: Don't clip in _mesa_readpixels()

The clipping is performed higher up in the call-chain.

Signed-off-by: Nanley Chery <nanley.g.chery@intel.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
8 years agomesa/readpix: Clip ReadPixels() area to the ReadBuffer's
Nanley Chery [Sat, 6 Feb 2016 00:21:33 +0000 (16:21 -0800)]
mesa/readpix: Clip ReadPixels() area to the ReadBuffer's

The fast path for Intel's ReadPixels() unintentionally omits clipping
the specified area to a valid one. Rather than clip in various
corner-cases, perform this operation in the API validation stage.

The bug in intel_readpixels_tiled_memcpy() showed itself when the winsys
ReadBuffer's height was smaller than the one specified by ReadPixels().
yoffset became negative, which was an invalid input for tiled_to_linear().

v2: Move clipping to validation stage (Jason)

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92193
Reported-by: Marta Löfstedt <marta.lofstedt@intel.com>
Cc: "11.0 11.1" <mesa-stable@lists.freedesktop.org>
Signed-off-by: Nanley Chery <nanley.g.chery@intel.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
8 years agomesa/image: Make _mesa_clip_readpixels() work with renderbuffers
Nanley Chery [Sat, 6 Feb 2016 00:20:01 +0000 (16:20 -0800)]
mesa/image: Make _mesa_clip_readpixels() work with renderbuffers

v2: Use gl_renderbuffer::{Width,Height} (Jason)

Cc: "11.0 11.1" <mesa-stable@lists.freedesktop.org>
Signed-off-by: Nanley Chery <nanley.g.chery@intel.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
8 years agoi965/vec4: Plumb separate surfaces and samplers through from NIR
Jason Ekstrand [Tue, 3 Nov 2015 02:39:17 +0000 (18:39 -0800)]
i965/vec4: Plumb separate surfaces and samplers through from NIR

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/vec4: Separate the sampler from the surface in generate_tex
Jason Ekstrand [Tue, 3 Nov 2015 02:28:49 +0000 (18:28 -0800)]
i965/vec4: Separate the sampler from the surface in generate_tex

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: Plumb separate surfaces and samplers through from NIR
Jason Ekstrand [Sat, 6 Feb 2016 02:24:02 +0000 (18:24 -0800)]
i965/fs: Plumb separate surfaces and samplers through from NIR

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: Separate the sampler from the surface in generate_tex
Jason Ekstrand [Mon, 2 Nov 2015 23:24:05 +0000 (15:24 -0800)]
i965/fs: Separate the sampler from the surface in generate_tex

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: Add an enum for keeping track of texture instruciton sources
Jason Ekstrand [Sat, 6 Feb 2016 02:39:13 +0000 (18:39 -0800)]
i965/fs: Add an enum for keeping track of texture instruciton sources

These logical texture instructions can have a *lot* of sources.  It's much
safer if we have symbolic names for them.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agonir: Separate texture from sampler in nir_tex_instr
Jason Ekstrand [Tue, 3 Nov 2015 01:58:29 +0000 (17:58 -0800)]
nir: Separate texture from sampler in nir_tex_instr

This commit adds the capability to NIR to support separate textures and
samplers.  As it currently stands, glsl_to_nir only sets the texture deref
and leaves the sampler deref alone as it did before and nir_lower_samplers
assumes this.  Backends can still assume that they are combined and only
look at only at the texture index.  Or, if they wish, they can assume that
they are separate because nir_lower_samplers, tgsi_to_nir, and prog_to_nir
all set both texture and sampler index whenever a sampler is required (the
two indices are the same in this case).

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>