mesa.git
7 years agosvga: add a helper function to check for typeless format
Charmaine Lee [Mon, 24 Oct 2016 17:50:29 +0000 (10:50 -0700)]
svga: add a helper function to check for typeless format

This patch adds a helper function svga_format_is_typeless() which
returns TRUE if the specified format is typeless.

Reviewed-by: Brian Paul <brianp@vmware.com>
7 years agosvga: add SVGA_NEW_FRAME_BUFFER to svga_hw_tss_binding state atom
Brian Paul [Tue, 27 Sep 2016 16:06:46 +0000 (10:06 -0600)]
svga: add SVGA_NEW_FRAME_BUFFER to svga_hw_tss_binding state atom

We may need to re-emit texture bindings when the framebuffer state
changes.  In particular, emitting the texture binding can also involve
updating a texture from its backing copy during sampler view validation.
The backing copy is made during framebuffer validation.

This helps to fix an issue with Photoshop on VGPU9 (VMware bug 1723971).

Reviewed-by: Charmaine Lee <charmainel@vmware.com>
7 years agosvga: allow copy_region if sample counts match
Charmaine Lee [Fri, 28 Oct 2016 18:39:47 +0000 (11:39 -0700)]
svga: allow copy_region if sample counts match

With this patch, we will allow blit with copy_region if the
source and destination textures have the same sample counts.

Fixes failures with piglit tests
 spec@arb_texture_float@multisample-formats 2 gl_arb_texture_float
 spec@arb_texture_rg@multisample-formats 2 gl_arb_texture_rg-float

Reviewed-by: Brian Paul <brianp@vmware.com>
7 years agosvga: set rendered-to flag after updating the texture using PredCopyRegion
Charmaine Lee [Mon, 3 Oct 2016 20:29:58 +0000 (13:29 -0700)]
svga: set rendered-to flag after updating the texture using PredCopyRegion

This patch sets the rendered-to flag for the subresource after it is
updated using the PredCopyRegion command. This is to ensure that the GB surface
will be sync up properly before it will be directly mapped to.

Tested with MTT piglit, glretrace.

Reviewed-by: Brian Paul <brianp@vmware.com>
7 years agosvga: add can_use_upload flag
Charmaine Lee [Fri, 30 Sep 2016 23:41:12 +0000 (16:41 -0700)]
svga: add can_use_upload flag

This patch adds a flag "can_use_upload" to svga_texture structure
to avoid some checking of the upload availability at each transfer map time.

Tested with Lightsmark2008, Tropics, MTT glretrace, piglit.

Reviewed-by: Brian Paul <brianp@vmware.com>
7 years agosvga: fix texture upload path condition
Charmaine Lee [Fri, 30 Sep 2016 22:52:14 +0000 (15:52 -0700)]
svga: fix texture upload path condition

As Thomas suggested, we'll first try to map directly to a GB surface.
If it is blocked, then we'll use texture upload buffer.
Also if a texture is already "rendered to", that is, the GB surface
is already out of sync, then we'll use the texture upload buffer
to avoid syncing the GB surface.

Tested with Lightsmark2008, Tropics, MTT piglit, glretrace.

Reviewed-by: Brian Paul <brianp@vmware.com>
7 years agosvga: set rendered_to flag with texture uploaded using TransferFromBuffer command
Charmaine Lee [Thu, 29 Sep 2016 23:41:21 +0000 (16:41 -0700)]
svga: set rendered_to flag with texture uploaded using TransferFromBuffer command

This patch sets the rendered_to flag for the texture subresource that
is uploaded using the TransferFromBuffer command. This is to ensure that
the subresource will be read back or invalidated before it will be
directly mapped to. This makes sure that the content of the GB surface
will not be accidentally overwritten by the device at suspend/resume time.

Reviewed-by: Brian Paul <brianp@vmware.com>
7 years agosvga: Add render_condition boolean flag in struct svga_context
Neha Bhende [Wed, 28 Sep 2016 17:48:45 +0000 (10:48 -0700)]
svga: Add render_condition boolean flag in struct svga_context

set render_condition flag when driver performs conditional rendering.
Blit using DXPredCopyRegion command gets affected by conditional rendering so
We should check this flag while performing blit operation

Tested with piglit tests.

v2: As per Charmaine's comment, setting render_condition flag if svga_query is valid.
Tested with pigit tests.

Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Charmaine Lee <charmainel@vmware.com>
7 years agosvga: Allow DXPredCopyRegion for depth_and_stencil formats.
Neha Bhende [Wed, 21 Sep 2016 19:27:14 +0000 (12:27 -0700)]
svga: Allow DXPredCopyRegion for depth_and_stencil formats.

DXPredCopyRegion supports copy between src and dst for depth_and_stencil
formats if src and dst have same formats.

tested ith piglit

v2: As per Brian's comment, allow DXPredCopyRegion for depth+stencil buffers
if the blit mask is PIPE_MASK_ZS.

Tested with piglit tests and added new piglit test
arb_framebuffer_object-depth-stencil-blit to test this particular testcase.

Reviewed-by: Brian Paul <brianp@vmware.com>
7 years agosvga: fix memory leak in svga_clear_texture()
Neha Bhende [Fri, 28 Oct 2016 18:29:11 +0000 (11:29 -0700)]
svga: fix memory leak in svga_clear_texture()

Piglit tests which uses arb_clear_texture extension, have memory leak issue.
pipe_surface created in svga_clear_texture() was not deleted which happens to be
the cause for memory leak.

tested all arb_clear_texture-* piglit tests with valgrid.

Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Charmaine Lee <charmainel@vmware.com>
7 years agosvga: Implement the pipe clear_render_target functionality v2
Thomas Hellstrom [Fri, 28 Oct 2016 18:33:53 +0000 (11:33 -0700)]
svga: Implement the pipe clear_render_target functionality v2

v2: Accounted for the fact that svga_try_clear_render_target also
honors conditional rendering.

Testing done: Excercised all functions in a separate feature branch. Forced
emission of conditional rendering commands when necessary.

Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
7 years agosvga: add SVGA_3D_CMD_INVALIDATE_GB_SURFACE support
Charmaine Lee [Wed, 2 Mar 2016 17:31:58 +0000 (09:31 -0800)]
svga: add SVGA_3D_CMD_INVALIDATE_GB_SURFACE support

This command will be used in a subsequent patch to invalidate a surface.

Reviewed-by: Brian Paul <brianp@vmware.com>
7 years agonir: Flip gl_SamplePosition in nir_lower_wpos_ytransform().
Francisco Jerez [Tue, 1 Nov 2016 18:56:13 +0000 (11:56 -0700)]
nir: Flip gl_SamplePosition in nir_lower_wpos_ytransform().

Assuming the hardware is set up to use a screen coordinate system
flipped vertically with respect to the GL's window coordinate system,
the SYSTEM_VALUE_SAMPLE_POS vector will also be flipped vertically
with respect to the value expected by the GL, so we need to give it
the same treatment as gl_FragCoord.  Fixes the following CTS tests on
i965:

 ES31-CTS.functional.shaders.multisample_interpolation.interpolate_at_offset.at_sample_position.default_framebuffer
 ES31-CTS.functional.shaders.sample_variables.sample_pos.correctness.default_framebuffer

when run with any multisample configuration, e.g. rgba8888d24s8ms4.

Cc: <mesa-stable@lists.freedesktop.org>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
7 years agoisl: Only allow Y-tiling for ASTC textures
Nanley Chery [Thu, 22 Sep 2016 21:51:37 +0000 (14:51 -0700)]
isl: Only allow Y-tiling for ASTC textures

Signed-off-by: Nanley Chery <nanley.g.chery@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
7 years agoanv/blorp: Don't create linear ASTC surfaces for buffers
Nanley Chery [Wed, 2 Nov 2016 23:18:44 +0000 (16:18 -0700)]
anv/blorp: Don't create linear ASTC surfaces for buffers

Such a surface is not possible on our hardware. Without this change, ISL
surface creation would fail with the next patch.

Signed-off-by: Nanley Chery <nanley.g.chery@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
7 years agoanv/formats: Disallow linear ASTC textures
Nanley Chery [Thu, 22 Sep 2016 22:43:07 +0000 (15:43 -0700)]
anv/formats: Disallow linear ASTC textures

Signed-off-by: Nanley Chery <nanley.g.chery@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
7 years agoanv/formats: Disallow 1D compressed textures
Nanley Chery [Thu, 22 Sep 2016 23:44:19 +0000 (16:44 -0700)]
anv/formats: Disallow 1D compressed textures

Signed-off-by: Nanley Chery <nanley.g.chery@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
7 years agoi965: Use rzalloc for cfg_t
Chris Wilson [Wed, 2 Nov 2016 07:01:35 +0000 (07:01 +0000)]
i965: Use rzalloc for cfg_t

Valgrind reports that we use cfg.cycle_count uninitialised, so zero the
cfg_t on construction.

Fixes: 52d2b28f7f10 ("ralloc: use rzalloc where it's necessary")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agopipe-loader: add libamd_common for radeonsi
Nicolai Hähnle [Thu, 3 Nov 2016 14:25:45 +0000 (15:25 +0100)]
pipe-loader: add libamd_common for radeonsi

This fixes a build regression of commit 7115e56c21ace07cf04f5073ba73a533e2182099.
Sorry for the breakage, this second location for link dependencies escaped
my build tests.

Bugzilla: https://patchwork.freedesktop.org/patch/119816/
Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
7 years agoglx/windows: Add wgl.h to the sources list
Andreas Boll [Wed, 2 Nov 2016 11:11:54 +0000 (12:11 +0100)]
glx/windows: Add wgl.h to the sources list

Otherwise it won't be picked in the tarball and the build will fail.

Fixes: 533b3530c12 ("direct-to-native-GL for GLX clients on Cygwin
("Windows-DRI")")
Cc: "13.0" <mesa-stable@lists.freedesktop.org>
Signed-off-by: Andreas Boll <andreas.boll.dev@gmail.com>
Reviewed-by: Jon Turney <jon.turney@dronecode.org.uk>
7 years agoi965: use rzalloc instead of calloc in brwNewProgram
Tapani Pälli [Thu, 3 Nov 2016 09:36:47 +0000 (11:36 +0200)]
i965: use rzalloc instead of calloc in brwNewProgram

commit cc6aa1d161280f10ded7834d1ec2413bc97589fe changed to using rzalloc
for gl_program creation but one instance for program creation was still
using calloc.

Signed-off-by: Tapani Pälli <tapani.palli@intel.com>
Reviewed-by: Juan A. Suarez <jasuarez@igalia.com>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
7 years agoradeonsi: generate GS prolog to (partially) fix triangle strip adjacency rotation
Nicolai Hähnle [Mon, 31 Oct 2016 11:50:09 +0000 (12:50 +0100)]
radeonsi: generate GS prolog to (partially) fix triangle strip adjacency rotation

Fixes GL45-CTS.geometry_shader.adjacency.adjacency_indiced_triangle_strip and
others.

This leaves the case of triangle strips with adjacency and primitive restarts
open. It seems that the only thing that cares about that is a piglit test.
Fixing this efficiently would be really involved, and I don't want to use the
hammer of degrading to software handling of indices because there may well
be software that uses this draw mode (without caring about the precise
rotation of triangles).

v2:
- skip the GS prolog entirely if workaround is not needed
- only check for TES (TES is always non-null when tessellation is used)

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: remove si_shader_context::is_gs_copy_shader
Nicolai Hähnle [Mon, 31 Oct 2016 20:13:12 +0000 (21:13 +0100)]
radeonsi: remove si_shader_context::is_gs_copy_shader

It has become redundant.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: make the GS copy shader owned by the GS selector
Nicolai Hähnle [Mon, 31 Oct 2016 20:10:37 +0000 (21:10 +0100)]
radeonsi: make the GS copy shader owned by the GS selector

The copy shader only depends on the selector. This change avoids creating
separate code paths for monolithic vs. non-monolithic geometry shaders.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: si_shader_vs only depends on the GS selector
Nicolai Hähnle [Mon, 31 Oct 2016 20:09:20 +0000 (21:09 +0100)]
radeonsi: si_shader_vs only depends on the GS selector

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: si_vgt_gs_mode only depends on the selector
Nicolai Hähnle [Mon, 31 Oct 2016 20:07:53 +0000 (21:07 +0100)]
radeonsi: si_vgt_gs_mode only depends on the selector

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: make si_generate_gs_copy_shader usable as a standalone function
Nicolai Hähnle [Mon, 31 Oct 2016 19:53:37 +0000 (20:53 +0100)]
radeonsi: make si_generate_gs_copy_shader usable as a standalone function

It really only depends on the shader selector.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: unify the si_compile_* functions for prologs and epilogs
Nicolai Hähnle [Fri, 28 Oct 2016 20:26:33 +0000 (22:26 +0200)]
radeonsi: unify the si_compile_* functions for prologs and epilogs

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: get rid of no_{prolog,epilog}
Nicolai Hähnle [Mon, 31 Oct 2016 15:30:17 +0000 (16:30 +0100)]
radeonsi: get rid of no_{prolog,epilog}

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: get rid of si_llvm_emit_fs_epilogue
Nicolai Hähnle [Fri, 28 Oct 2016 20:10:00 +0000 (22:10 +0200)]
radeonsi: get rid of si_llvm_emit_fs_epilogue

It is no longer used.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: get rid of get_interp_param
Nicolai Hähnle [Fri, 28 Oct 2016 20:09:26 +0000 (22:09 +0200)]
radeonsi: get rid of get_interp_param

Replace by a simple LLVMGetParam, since ctx->no_prolog is always false.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: get rid of select_interp_param
Nicolai Hähnle [Fri, 28 Oct 2016 20:08:10 +0000 (22:08 +0200)]
radeonsi: get rid of select_interp_param

The condition !ctx->no_prolog is now always true.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: use TCS epilog for monolithic shaders
Nicolai Hähnle [Fri, 28 Oct 2016 19:49:32 +0000 (21:49 +0200)]
radeonsi: use TCS epilog for monolithic shaders

For fixed function TCS, we keep the copying of VS outputs to TES inputs inside
the main function; the call to si_copy_tcs_inputs is moved accordingly.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: extract si_build_tcs_epilog_function
Nicolai Hähnle [Fri, 28 Oct 2016 19:47:02 +0000 (21:47 +0200)]
radeonsi: extract si_build_tcs_epilog_function

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: use VS epilog for monolithic TES
Nicolai Hähnle [Fri, 28 Oct 2016 19:42:47 +0000 (21:42 +0200)]
radeonsi: use VS epilog for monolithic TES

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: use VS prolog and epilog for monolithic shaders
Nicolai Hähnle [Fri, 28 Oct 2016 19:31:27 +0000 (21:31 +0200)]
radeonsi: use VS prolog and epilog for monolithic shaders

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: extract si_build_vs_{prolog,epilog}_function
Nicolai Hähnle [Fri, 28 Oct 2016 19:24:35 +0000 (21:24 +0200)]
radeonsi: extract si_build_vs_{prolog,epilog}_function

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: use PS prolog for monolithic shaders
Nicolai Hähnle [Fri, 28 Oct 2016 13:38:47 +0000 (15:38 +0200)]
radeonsi: use PS prolog for monolithic shaders

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: set num_input_vgprs for fragment shaders in create_function
Nicolai Hähnle [Fri, 28 Oct 2016 13:36:43 +0000 (15:36 +0200)]
radeonsi: set num_input_vgprs for fragment shaders in create_function

So that the prolog generated for monolithic fragment shaders will have the
right signature.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: extract si_build_ps_prolog_function
Nicolai Hähnle [Fri, 28 Oct 2016 12:57:27 +0000 (14:57 +0200)]
radeonsi: extract si_build_ps_prolog_function

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: use PS epilog for monolithic shaders
Nicolai Hähnle [Fri, 28 Oct 2016 12:45:59 +0000 (14:45 +0200)]
radeonsi: use PS epilog for monolithic shaders

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: extract si_build_ps_epilog_function
Nicolai Hähnle [Thu, 27 Oct 2016 16:48:16 +0000 (18:48 +0200)]
radeonsi: extract si_build_ps_epilog_function

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: pass the function name to si_llvm_create_func
Nicolai Hähnle [Thu, 27 Oct 2016 16:57:34 +0000 (18:57 +0200)]
radeonsi: pass the function name to si_llvm_create_func

We will use multiple functions in one module, so they should have
different names.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: split is_monolithic into no_prolog and no_epilog
Nicolai Hähnle [Thu, 27 Oct 2016 15:33:22 +0000 (17:33 +0200)]
radeonsi: split is_monolithic into no_prolog and no_epilog

This helps to achieve a gradual transition towards building monolithic shaders
via inlining.

no_prolog and no_epilog will be removed by the end of the series,
separate_prolog remains in use to control the PS input mapping.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: free data structures when shader compiles fail
Nicolai Hähnle [Thu, 27 Oct 2016 15:22:10 +0000 (17:22 +0200)]
radeonsi: free data structures when shader compiles fail

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: move main TGSI translation into its own function
Nicolai Hähnle [Thu, 27 Oct 2016 15:21:25 +0000 (17:21 +0200)]
radeonsi: move main TGSI translation into its own function

The idea is that adding prolog and epilog code will be pulled out into the
caller.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: add always-inline pass to si_llvm_finalize_module
Nicolai Hähnle [Fri, 28 Oct 2016 12:42:46 +0000 (14:42 +0200)]
radeonsi: add always-inline pass to si_llvm_finalize_module

Change the pass manager as well, since this is a module-level pass. No
noticeable run-time difference on shader-db.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: fix signature of export intrinsic in VS epilog
Nicolai Hähnle [Mon, 31 Oct 2016 10:36:35 +0000 (11:36 +0100)]
radeonsi: fix signature of export intrinsic in VS epilog

The incompatible signature becomes an issue when the VS epilog gets merged
with the main vertex shader at the IR level.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradeonsi: link against amd_common
Nicolai Hähnle [Fri, 28 Oct 2016 12:41:10 +0000 (14:41 +0200)]
radeonsi: link against amd_common

Reviewed-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoamd/common: add ac_is_sgpr_param helper
Nicolai Hähnle [Fri, 28 Oct 2016 12:40:24 +0000 (14:40 +0200)]
amd/common: add ac_is_sgpr_param helper

Reviewed-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoamd/common: build also for gallium drivers
Nicolai Hähnle [Mon, 31 Oct 2016 10:56:09 +0000 (11:56 +0100)]
amd/common: build also for gallium drivers

At least when LLVM is used, which is basically always (unless you're only
building r600 without OpenCL).

Reviewed-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoamd/common: move llvm helper prototype to ac_llvm_util.h
Nicolai Hähnle [Thu, 27 Oct 2016 14:48:42 +0000 (16:48 +0200)]
amd/common: move llvm helper prototype to ac_llvm_util.h

Reviewed-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoglsl: fix lowering of UBO references of named blocks
Nicolai Hähnle [Mon, 31 Oct 2016 13:03:10 +0000 (14:03 +0100)]
glsl: fix lowering of UBO references of named blocks

When a UBO reference has the form block_name.foo where block_name refers
to a block where the first member has a non-zero offset, the base offset
was incorrectly added to the reference.

Fixes an assertion triggered in debug builds by
GL45-CTS.enhanced_layouts.uniform_block_layout_qualifier_conflict. That test
doesn't properly check for correct execution in this case, so I am also
going to send out a piglit test.

Cc: 13.0 <mesa-stable@lists.freedesktop.org>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoglsl: Update deref types when resizing implicitly sized arrays.
Kenneth Graunke [Wed, 2 Nov 2016 20:35:30 +0000 (13:35 -0700)]
glsl: Update deref types when resizing implicitly sized arrays.

At link time, we resolve the size of implicitly sized arrays.
When doing so, we update the type of the ir_variables.  However,
we neglected to update the type of ir_dereference nodes which
reference those variables.

It turns out array_resize_visitor (for GS/TCS/TES interface array
handling) already did 2/3 of the cases for this, so we can simply
refactor the code and reuse it.

This fixes:
GL45-CTS.shader_storage_buffer_object.basic-syntax
GL45-CTS.shader_storage_buffer_object.basic-syntaxSSO

which have an SSBO containing an implicitly sized array, followed
by some other members.  setup_buffer_access uses the dereference
types to compute offsets to fields, and it had a stale type where
the implicitly sized array's length was still 0 instead of the
actual length.

While we're here, we can also fix update_array_sizes to properly
update deref types as well, fixing a FINISHME from 2010.

Cc: mesa-stable@lists.freedesktop.org
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
7 years agomesa/glsl: delete previously linked shaders earlier when linking
Timothy Arceri [Tue, 1 Nov 2016 22:49:58 +0000 (09:49 +1100)]
mesa/glsl: delete previously linked shaders earlier when linking

This moves the delete linked shaders call to
_mesa_clear_shader_program_data() which makes sure we delete them
before returning due to any validation problems.

It also reduces some code duplication.

From the OpenGL 4.5 Core spec:

   "If LinkProgram failed, any information about a previous link of
   that program object is lost. Thus, a failed link does not restore
   the old state of program.

   ...

   If one of these commands is called with a program for which
   LinkProgram failed, no error is generated unless otherwise noted.
   Implementations may return information on variables and interface
   blocks that would have been active had the program been linked
   successfully. In cases where the link failed because the program
   required too many resources, these commands may help applications
   determine why limits were exceeded."

Therefore it's expected that we shouldn't be able to query the
program that failed to link and retrieve information about a
previously successful link.

Before this change the linker was doing validation before freeing
the previously linked shaders and therefore could exit on failure
before they were freed.

This change also fixes an issue in compat profile where a program
with no shaders attached is expect to fall back to fixed function
but was instead trying to relink IR from a previous link.

Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97715
Cc: "13.0" <mesa-stable@lists.freedesktop.org>
7 years agonir: fix nir_shader_clone() and nir_sweep()
Timothy Arceri [Wed, 2 Nov 2016 22:18:19 +0000 (09:18 +1100)]
nir: fix nir_shader_clone() and nir_sweep()

These were broken in e1af20f18a8 when the info field in nir_shader was
turned into a pointer.

Clone was copying the pointer rather than the data and nir_sweep was
cleaning up shader_info rather than claiming it.

Reviewed-by: Eric Anholt <eric@anholt.net>
7 years agomesa: move shader_info to the start of gl_program
Timothy Arceri [Wed, 2 Nov 2016 22:18:18 +0000 (09:18 +1100)]
mesa: move shader_info to the start of gl_program

This will allow use to use ralloc_parent() on the info field and fix
a regression in nir_sweep() caused by e1af20f18a8.

This is intended to be a temporary requirement that will be removed
when we finish separating shader_info from nir_shader.

Reviewed-by: Eric Anholt <eric@anholt.net>
7 years agost/mesa/r200/i915/i965: use rzalloc() to create gl_program
Timothy Arceri [Wed, 2 Nov 2016 22:18:17 +0000 (09:18 +1100)]
st/mesa/r200/i915/i965: use rzalloc() to create gl_program

This allows us to use ralloc_parent() to see which data structure owns
shader_info which allows us to fix a regression in nir_sweep().

This will also allow us to move some fields from gl_linked_shader to
gl_program, which will allow us to do some clean-ups like storing
gl_program directly in the CurrentProgram array in gl_pipeline_object
enabling some small validation optimisations at draw time.

Also it is error prone to depend on the gl_linked_shader for
programs in current use because a failed linking attempt will free
infomation about the current program. In i965 we could be trying
to recompile a shader variant but may have lost some required fields.

Reviewed-by: Eric Anholt <eric@anholt.net>
7 years agonv50,nvc0: stop limiting the number of active queries to 1
Samuel Pitoiset [Wed, 26 Oct 2016 22:08:30 +0000 (00:08 +0200)]
nv50,nvc0: stop limiting the number of active queries to 1

This limitation was initially here because AMD_performance_monitor
doesn't allow to expose the real number of hardware counters. But
this actually really annoying when profiling with qapitrace.

Anyways, performance counters are mostly for developers and
failures are expected if you try to monitor more queries than
supported.

This breaks amd_performance_monitor_measure but it's expected.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
7 years agonvc0: add new warp_nonpred_execution_efficiency metric on SM35
Samuel Pitoiset [Wed, 2 Nov 2016 22:50:03 +0000 (23:50 +0100)]
nvc0: add new warp_nonpred_execution_efficiency metric on SM35

Event not_predicated_off_thread_inst_executed is SM35+.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
7 years agonvc0: add missing metric-issue_slot on SM35
Samuel Pitoiset [Tue, 1 Nov 2016 18:34:44 +0000 (19:34 +0100)]
nvc0: add missing metric-issue_slot on SM35

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
7 years agonvc0: do not expose metric-inst_issued twice on SM35
Samuel Pitoiset [Tue, 1 Nov 2016 18:19:15 +0000 (19:19 +0100)]
nvc0: do not expose metric-inst_issued twice on SM35

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
7 years agonvc0: add new warp_execution_efficiency metric on SM30+
Samuel Pitoiset [Wed, 2 Nov 2016 22:57:25 +0000 (23:57 +0100)]
nvc0: add new warp_execution_efficiency metric on SM30+

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
7 years agonvc0: respect 80-chars for perf metrics descriptions
Samuel Pitoiset [Tue, 1 Nov 2016 18:23:21 +0000 (19:23 +0100)]
nvc0: respect 80-chars for perf metrics descriptions

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
7 years agonvc0: sort performance metrics alphabetically
Samuel Pitoiset [Tue, 1 Nov 2016 18:22:37 +0000 (19:22 +0100)]
nvc0: sort performance metrics alphabetically

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
7 years agoradv: add support for anisotropic filtering on VI+
Fredrik Höglund [Thu, 27 Oct 2016 01:02:14 +0000 (03:02 +0200)]
radv: add support for anisotropic filtering on VI+

Ported from radeonsi.

Cc: "13.0" <mesa-stable@lists.freedesktop.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
7 years agoradv: fix dual source blending
Dave Airlie [Wed, 2 Nov 2016 00:33:33 +0000 (00:33 +0000)]
radv: fix dual source blending

Dolphin tried to use this, but we hadn't had any tests for it properly.

All that is required is the shader output format needs to be set
for 0 and 1 exports.

Cc: "13.0" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Signed-off-by: Dave Airlie <airlied@redhat.com>
7 years agonv50: add missing draw_calls_indexed driver stat
Samuel Pitoiset [Wed, 8 Jun 2016 19:18:36 +0000 (21:18 +0200)]
nv50: add missing draw_calls_indexed driver stat

Spotted when glancing at the VBO push code.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
7 years agoglx/glvnd: Use bsearch() in FindGLXFunction instead of open-coding it
Adam Jackson [Wed, 14 Sep 2016 18:02:56 +0000 (14:02 -0400)]
glx/glvnd: Use bsearch() in FindGLXFunction instead of open-coding it

Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
Signed-off-by: Adam Jackson <ajax@redhat.com>
7 years agoglx/glvnd: Fix dispatch function names and indices
Adam Jackson [Wed, 14 Sep 2016 18:01:13 +0000 (14:01 -0400)]
glx/glvnd: Fix dispatch function names and indices

As this array was not actually sorted, FindGLXFunction's binary search
would only sometimes work.

Cc: "13.0" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
Signed-off-by: Adam Jackson <ajax@redhat.com>
7 years agoglx/glvnd: Don't modify the dummy slot in the dispatch table
Adam Jackson [Wed, 14 Sep 2016 17:56:50 +0000 (13:56 -0400)]
glx/glvnd: Don't modify the dummy slot in the dispatch table

Cc: "13.0" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
Signed-off-by: Adam Jackson <ajax@redhat.com>
7 years agoanv/pipeline: Properly cache prog_data::param
Jason Ekstrand [Tue, 1 Nov 2016 22:10:29 +0000 (15:10 -0700)]
anv/pipeline: Properly cache prog_data::param

Before we were caching the prog data but we weren't doing anything with
brw_stage_prog_data::param so anything with push constants wasn't getting
cached properly.  This commit fixes that.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98012
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Cc: "13.0" <mesa-stable@lists.freedesktop.org>
7 years agoanv/pipeline: Put actual pointers in anv_shader_bin
Jason Ekstrand [Tue, 1 Nov 2016 23:03:12 +0000 (16:03 -0700)]
anv/pipeline: Put actual pointers in anv_shader_bin

While we can simply calculate offsets to get to things such as the
prog_data and the key, it's much more user-friendly if there are just
pointers.  Also, it's a bit more fool-proof.

While we're at it, we rework the pipeline cache API to use the
brw_stage_prog_data type directly.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98012
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Cc: "13.0" <mesa-stable@lists.freedesktop.org>
7 years agointel/blorp: Pass a brw_stage_prog_data to upload_shader
Jason Ekstrand [Tue, 1 Nov 2016 21:16:34 +0000 (14:16 -0700)]
intel/blorp: Pass a brw_stage_prog_data to upload_shader

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98012
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Cc: "13.0" <mesa-stable@lists.freedesktop.org>
7 years agointel/blorp: Use wm_prog_data instead of hand-rolling our own
Jason Ekstrand [Tue, 1 Nov 2016 21:03:43 +0000 (14:03 -0700)]
intel/blorp: Use wm_prog_data instead of hand-rolling our own

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98012
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Cc: "13.0" <mesa-stable@lists.freedesktop.org>
7 years agoanv: Better handle return codes from anv_physical_device_init
Jason Ekstrand [Wed, 2 Nov 2016 00:51:56 +0000 (17:51 -0700)]
anv: Better handle return codes from anv_physical_device_init

The case where we just want the loop to continue is INCOMPATIBLE_DRIVER
because that simply means that whatever FD we opened isn't a supported
Intel chip.  Other error codes such as OUT_OF_HOST_MEMORY are actual errors
and we should be returning early in that case.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
Cc: "13.0" <mesa-stable@lists.freedesktop.org>
7 years agovulkan/wsi/x11: Clean up connections in finish_wsi
Jason Ekstrand [Wed, 2 Nov 2016 00:18:30 +0000 (17:18 -0700)]
vulkan/wsi/x11: Clean up connections in finish_wsi

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
Cc: "13.0" <mesa-stable@lists.freedesktop.org>
7 years agovulkan/wsi/x11: Better handle wsi_x11_connection_create failure
Jason Ekstrand [Wed, 2 Nov 2016 00:16:14 +0000 (17:16 -0700)]
vulkan/wsi/x11: Better handle wsi_x11_connection_create failure

Without this fix, the function would still end up returning NULL but it
would put that NULL connection in the hash table which would be bad.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
Cc: "13.0" <mesa-stable@lists.freedesktop.org>
7 years agoandroid: avoid using libdrm with host modules
Chih-Wei Huang [Fri, 28 Oct 2016 09:54:17 +0000 (17:54 +0800)]
android: avoid using libdrm with host modules

Note LOCAL_CFLAGS and LOCAL_SHARED_LIBRARIES in Android.common.mk
are used by both host and target modules. However, commit 112e988
moved libdrm related flags to common. It causes the errors like:

error: 'out/host/linux-x86/obj32/SHARED_LIBRARIES/libdrm_intermediates/export_includes',
needed by 'out/host/linux-x86/obj32/EXECUTABLES/mesa_gen_matypes_intermediates/import_includes',
missing and no known rule to make it

No reason to use libdrm with host modules.

Cc: "13.0" <mesa-stable@lists.freedesktop.org>
Fixes: 112e988329b ("Android: move libdrm settings to top-level
Android.common.mk")
Signed-off-by: Chih-Wei Huang <cwhuang@linux.org.tw>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
7 years agoglsl: compute lvalues of [in]out parameters before inlined function body
Nicolai Hähnle [Wed, 19 Oct 2016 17:43:39 +0000 (19:43 +0200)]
glsl: compute lvalues of [in]out parameters before inlined function body

This is required when an out argument involves an array index that is either
a global variable modified by the function or another out argument in the
same function call.

Fixes the shaders/out-parameter-indexing/vs-inout-index-inout-* tests.

v2:
- modify the ir_dereference_array nodes in place
- use ir_hierarchical_visitor
v3: use base_ir (Ian Romanick)

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
7 years agoradeonsi: fix BFE/BFI lowering for GLSL semantics
Nicolai Hähnle [Thu, 27 Oct 2016 08:59:37 +0000 (10:59 +0200)]
radeonsi: fix BFE/BFI lowering for GLSL semantics

Fixes spec/arb_gpu_shader5/execution/built-in-functions/*-bitfield{Extract,Insert}

Cc: 13.0 <mesa-stable@lists.freedesktop.org>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agotgsi: align the definition of BFI & [UI]BFE with GLSL
Nicolai Hähnle [Thu, 27 Oct 2016 08:32:27 +0000 (10:32 +0200)]
tgsi: align the definition of BFI & [UI]BFE with GLSL

As previously written, these opcodes use the SM5 semantics which is
incompatible with GLSL when bits == 0, offset == 32.

At some point we may want to add BFI_SM5 etc. opcodes, but all users
currently either want (and expect!) the GLSL semantics or don't care.

Bitfield inserts are generated by the GLSL lower_instructions and
lower_packing_builtins passes with constant bits and offset arguments,
so any workaround code that drivers may have to emit to follow GLSL
semantics should be optimized away easily for those uses.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoradv: expose xlib platform extension
Dave Airlie [Tue, 1 Nov 2016 23:51:43 +0000 (23:51 +0000)]
radv: expose xlib platform extension

I missed this when I added the xlib code, this allows
dolphin emu to start and crash later.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Cc: "13.0" <mesa-stable@lists.freedesktop.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
7 years agointel: aubinator: print field values if available
Lionel Landwerlin [Fri, 14 Oct 2016 23:27:06 +0000 (00:27 +0100)]
intel: aubinator: print field values if available

Turning this :

sampler state 0
    Sampler Disable: false
    Texture Border Color Mode: 0
    LOD PreClamp Enable: 1
    Base Mip Level: 0.000000
    Mip Mode Filter: 0
    Mag Mode Filter: 1
    Min Mode Filter: 1
    Texture LOD Bias: foo
    Anisotropic Algorithm: 0

into this :

sampler state 0
    Sampler Disable: false
    Texture Border Color Mode: 0 (DX10/OGL)
    LOD PreClamp Enable: 1 (OGL)
    Base Mip Level: 0.000000
    Mip Mode Filter: 0 (NONE)
    Mag Mode Filter: 1 (LINEAR)
    Min Mode Filter: 1 (LINEAR)
    Texture LOD Bias: foo
    Anisotropic Algorithm: 0 (LEGACY)

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Sirisha Gandikota<sirisha.gandikota@intel.com>
7 years agointel: aubinator: load fields values from xml data
Lionel Landwerlin [Fri, 14 Oct 2016 23:16:25 +0000 (00:16 +0100)]
intel: aubinator: load fields values from xml data

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Sirisha Gandikota<sirisha.gandikota@intel.com>
7 years agointel: aubinator: print boolean fields to true with colors
Lionel Landwerlin [Fri, 14 Oct 2016 16:04:50 +0000 (17:04 +0100)]
intel: aubinator: print boolean fields to true with colors

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Sirisha Gandikota<sirisha.gandikota@intel.com>
7 years agoamd: fix a typo in PIXEL_PIPE_STAT_RESET definition
Marek Olšák [Fri, 28 Oct 2016 00:32:51 +0000 (02:32 +0200)]
amd: fix a typo in PIXEL_PIPE_STAT_RESET definition

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agogallium/radeon: add enum radeon_micro_mode
Marek Olšák [Wed, 26 Oct 2016 23:13:30 +0000 (01:13 +0200)]
gallium/radeon: add enum radeon_micro_mode

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agogallium/radeon: make it clear that DRM 2.x.x fast clear constraint is CIK-only
Marek Olšák [Wed, 26 Oct 2016 22:14:16 +0000 (00:14 +0200)]
gallium/radeon: make it clear that DRM 2.x.x fast clear constraint is CIK-only

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agogallium/radeon: remove r600_surface::level_info
Marek Olšák [Wed, 26 Oct 2016 11:47:11 +0000 (13:47 +0200)]
gallium/radeon: remove r600_surface::level_info

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agogallium/radeon: add radeon_surf::is_linear
Marek Olšák [Wed, 26 Oct 2016 11:42:28 +0000 (13:42 +0200)]
gallium/radeon: add radeon_surf::is_linear

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agogallium/radeon: remove radeon_surf_level::pitch_bytes
Marek Olšák [Wed, 26 Oct 2016 16:48:36 +0000 (18:48 +0200)]
gallium/radeon: remove radeon_surf_level::pitch_bytes

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agogallium/radeon: don't call u_format helpers if we have that info already
Marek Olšák [Wed, 26 Oct 2016 16:12:07 +0000 (18:12 +0200)]
gallium/radeon: don't call u_format helpers if we have that info already

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agogallium/radeon: replace radeon_surf_info::dcc_enabled with num_dcc_levels
Marek Olšák [Wed, 26 Oct 2016 15:43:19 +0000 (17:43 +0200)]
gallium/radeon: replace radeon_surf_info::dcc_enabled with num_dcc_levels

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoradeonsi: add a driver query for counting CP DMA calls
Marek Olšák [Thu, 27 Oct 2016 23:55:17 +0000 (01:55 +0200)]
radeonsi: add a driver query for counting CP DMA calls

CP DMA calls are synchronous with regard to shaders, but can be made
asynchronous if needed.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoradeonsi: add a driver query for shader cache hits
Marek Olšák [Thu, 11 Feb 2016 23:58:46 +0000 (00:58 +0100)]
radeonsi: add a driver query for shader cache hits

This is an 8-month old patch.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agogbm: set up the interop extension for egl/drm
Marek Olšák [Thu, 27 Oct 2016 15:41:55 +0000 (17:41 +0200)]
gbm: set up the interop extension for egl/drm

breaking libgbm -> libEGL ABI?

Acked-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
7 years agonvc0: do not duplicate similar performance metrics
Samuel Pitoiset [Mon, 31 Oct 2016 13:54:12 +0000 (14:54 +0100)]
nvc0: do not duplicate similar performance metrics

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Pierre Moreau <pierre.morrow@free.fr>
7 years agodocs: add news item and link release notes for 13.0.0
Emil Velikov [Tue, 1 Nov 2016 16:09:13 +0000 (16:09 +0000)]
docs: add news item and link release notes for 13.0.0

Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
7 years agodocs: add sha256 checksums for 13.0.0
Emil Velikov [Tue, 1 Nov 2016 16:05:32 +0000 (16:05 +0000)]
docs: add sha256 checksums for 13.0.0

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