mesa.git
7 years agost/glsl_to_tgsi: teach the DCE pass about bindless samplers/images
Samuel Pitoiset [Tue, 28 Mar 2017 23:22:47 +0000 (01:22 +0200)]
st/glsl_to_tgsi: teach the DCE pass about bindless samplers/images

When a texture (or an image) instruction uses a bindless sampler
(respectively a bindless image), make sure the DCE pass won't
remove code when the resource is a temporary variable.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agost/glsl_to_tgsi: add support for bindless pack/unpack operations
Samuel Pitoiset [Thu, 13 Apr 2017 09:35:03 +0000 (11:35 +0200)]
st/glsl_to_tgsi: add support for bindless pack/unpack operations

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agost/glsl_to_tgsi: add support for bindless images
Samuel Pitoiset [Thu, 13 Apr 2017 09:34:47 +0000 (11:34 +0200)]
st/glsl_to_tgsi: add support for bindless images

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agost/glsl_to_tgsi: add support for bindless samplers
Samuel Pitoiset [Wed, 19 Apr 2017 13:57:56 +0000 (15:57 +0200)]
st/glsl_to_tgsi: add support for bindless samplers

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agotgsi/ureg: accept TGSI_FILE_{CONSTANT,INPUT} for dst registers
Samuel Pitoiset [Thu, 30 Mar 2017 00:01:59 +0000 (02:01 +0200)]
tgsi/ureg: accept TGSI_FILE_{CONSTANT,INPUT} for dst registers

For example, TGSI_OPCODE_STORE for bindless images might use
a constant buffer or a shader input.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agotc: add ARB_bindless_texture support
Samuel Pitoiset [Tue, 16 May 2017 13:00:35 +0000 (15:00 +0200)]
tc: add ARB_bindless_texture support

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agotrace: add ARB_bindless_texture support
Samuel Pitoiset [Thu, 13 Apr 2017 22:54:17 +0000 (00:54 +0200)]
trace: add ARB_bindless_texture support

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoddebug: add ARB_bindless_texture support
Samuel Pitoiset [Fri, 31 Mar 2017 14:32:46 +0000 (16:32 +0200)]
ddebug: add ARB_bindless_texture support

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agogallium: add ARB_bindless_texture interface
Samuel Pitoiset [Tue, 28 Mar 2017 23:34:05 +0000 (01:34 +0200)]
gallium: add ARB_bindless_texture interface

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agogallium: add PIPE_CAP_BINDLESS_TEXTURE
Samuel Pitoiset [Thu, 16 Feb 2017 12:43:16 +0000 (13:43 +0100)]
gallium: add PIPE_CAP_BINDLESS_TEXTURE

Whether bindless texture operations are supported by the
underlying driver.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agomesa: fix setting uniform variables for bindless samplers/images
Samuel Pitoiset [Mon, 29 May 2017 20:47:24 +0000 (22:47 +0200)]
mesa: fix setting uniform variables for bindless samplers/images

This fixes a 64-bit vs 32-bit mismatch when setting an array
of bindless samplers. Also, we need to unconditionally set
size_mul to 2 when the underlying uniform is bindless.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agomesa: handle bindless uniforms bound to texture/image units
Samuel Pitoiset [Thu, 11 May 2017 16:42:22 +0000 (18:42 +0200)]
mesa: handle bindless uniforms bound to texture/image units

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agomesa: associate uniform storage to bindless samplers/images
Samuel Pitoiset [Thu, 11 May 2017 16:23:34 +0000 (18:23 +0200)]
mesa: associate uniform storage to bindless samplers/images

When a bindless sampler/image is bound to a texture/image unit,
we have to overwrite the constant value by the resident handle
directly in the constant buffer before the next draw.

One solution is to keep track of a pointer to the data.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agomesa: pass gl_program to _mesa_associate_uniform_storage()
Samuel Pitoiset [Thu, 11 May 2017 09:54:09 +0000 (11:54 +0200)]
mesa: pass gl_program to _mesa_associate_uniform_storage()

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agomesa: update textures for bindless samplers bound to texture units
Samuel Pitoiset [Thu, 11 May 2017 15:29:53 +0000 (17:29 +0200)]
mesa: update textures for bindless samplers bound to texture units

This is analogous to the existing SamplerUnits and SamplerTargets,
but it loops over bindless samplers bound to texture units.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agomesa: add update_single_program_texture_state() helper
Samuel Pitoiset [Wed, 10 May 2017 12:15:33 +0000 (14:15 +0200)]
mesa: add update_single_program_texture_state() helper

This will also be used for looping over bindless samplers bound
to texture units.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agomesa: add update_single_shader_texture_used() helper
Samuel Pitoiset [Wed, 10 May 2017 11:24:01 +0000 (13:24 +0200)]
mesa: add update_single_shader_texture_used() helper

This will also be used for looping over bindless samplers bound
to texture units.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoglsl: add ir_variable::contains_bindless()
Samuel Pitoiset [Thu, 4 May 2017 15:34:33 +0000 (17:34 +0200)]
glsl: add ir_variable::contains_bindless()

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoglsl: set the explicit binding value for bindless samplers/images
Samuel Pitoiset [Thu, 11 May 2017 15:37:27 +0000 (17:37 +0200)]
glsl: set the explicit binding value for bindless samplers/images

This handles a situation like:

layout (bindless_sampler, binding = 7) uniform sampler2D;

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoglsl: pass the ir_variable object to set_opaque_binding()
Samuel Pitoiset [Wed, 10 May 2017 13:41:25 +0000 (15:41 +0200)]
glsl: pass the ir_variable object to set_opaque_binding()

In order to set the explicit binding value for bindless
samplers/images.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoglsl: process uniform images declared bindless
Samuel Pitoiset [Fri, 12 May 2017 09:35:43 +0000 (11:35 +0200)]
glsl: process uniform images declared bindless

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoglsl: process uniform samplers declared bindless
Samuel Pitoiset [Thu, 11 May 2017 15:26:49 +0000 (17:26 +0200)]
glsl: process uniform samplers declared bindless

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agomesa: add infrastructure for bindless samplers/images bound to units
Samuel Pitoiset [Thu, 11 May 2017 15:29:47 +0000 (17:29 +0200)]
mesa: add infrastructure for bindless samplers/images bound to units

Yes, ARB_bindless_texture allows to do this. In other words, in
a situation like:

layout (bindless_sampler) uniform sampler2D tex;

The 'tex' sampler uniform can be either set with glUniform1()
(old-style bound samplers) or with glUniformHandleui() (resident
handles).

When glUniform1() is used, we have to somehow make the texture
resident "under the hood". This is done by requesting a texture
handle to the driver, making the handle resident in the current
context and overwriting the value directly in the constant buffer.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agomesa: store bindless samplers as PROGRAM_UNIFORM
Samuel Pitoiset [Wed, 19 Apr 2017 13:54:32 +0000 (15:54 +0200)]
mesa: store bindless samplers as PROGRAM_UNIFORM

Old-style samplers (ie. bound samplers) are stored as
PROGRAM_SAMPLER, while bindless ones are PROGRAM_UNIFORM.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agomesa: keep track of the current variable in add_uniform_to_shader
Samuel Pitoiset [Wed, 19 Apr 2017 13:37:49 +0000 (15:37 +0200)]
mesa: keep track of the current variable in add_uniform_to_shader

Bindless samplers are considered PROGRAM_UNIFORM but
add_uniform_to_shader::visit_field() is based on glsl_type.

Because only ir_variable knows if the uniform variable is
bindless via ir_variable::bindless, store it instead of
adding a new parameter to visit_field().

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agomesa: refuse to change tex buffers when a handle is allocated
Samuel Pitoiset [Wed, 29 Mar 2017 14:29:24 +0000 (16:29 +0200)]
mesa: refuse to change tex buffers when a handle is allocated

The ARB_bindless_texture spec says:

   "The error INVALID_OPERATION is generated by BufferData if it is
    called to modify a buffer object bound to a buffer texture while
    that texture object is referenced by one or more texture handles."

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agomesa: refuse to change textures when a handle is allocated
Samuel Pitoiset [Mon, 24 Apr 2017 12:22:24 +0000 (14:22 +0200)]
mesa: refuse to change textures when a handle is allocated

The ARB_bindless_texture spec says:

   "The error INVALID_OPERATION is generated by TexImage*, CopyTexImage*,
    CompressedTexImage*, TexBuffer*, TexParameter*, as well as other
    functions defined in terms of these, if the texture object to be
    modified is referenced by one or more texture or image handles."

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agomesa: refuse to update tex parameters when a handle is allocated
Samuel Pitoiset [Mon, 24 Apr 2017 12:16:15 +0000 (14:16 +0200)]
mesa: refuse to update tex parameters when a handle is allocated

The ARB_bindless_texture spec says:

   "The ARB_bindless_texture spec says: "The error INVALID_OPERATION
    is generated by TexImage*, CopyTexImage*, CompressedTexImage*,
    TexBuffer*, TexParameter*, as well as other functions defined in
    terms of these, if the texture object to be modified is referenced
    by one or more texture or image handles."

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agomesa: refuse to update sampler parameters when a handle is allocated
Samuel Pitoiset [Wed, 22 Feb 2017 22:20:03 +0000 (23:20 +0100)]
mesa: refuse to update sampler parameters when a handle is allocated

The ARB_bindless_texture spec says:

   "The error INVALID_OPERATION is generated by SamplerParameter* if
    <sampler> identifies a sampler object referenced by one or more
    texture handles."

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agomesa: add support for glUniformHandleui64*ARB()
Samuel Pitoiset [Fri, 24 Feb 2017 18:24:56 +0000 (19:24 +0100)]
mesa: add support for glUniformHandleui64*ARB()

Bindless sampler/image handles are represented using 64-bit
unsigned integers.

The ARB_bindless_texture spec says:

   "The error INVALID_OPERATION is generated by UniformHandleui64{v}ARB
   if the sampler or image uniform being updated has the "bound_sampler"
   or "bound_image" layout qualifier"."

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agomesa: add support for unsigned 64-bit vertex attributes
Samuel Pitoiset [Mon, 3 Apr 2017 20:03:10 +0000 (22:03 +0200)]
mesa: add support for unsigned 64-bit vertex attributes

This adds support in the VBO and array code to handle unsigned
64-bit vertex attributes as specified by ARB_bindless_texture.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agomesa: implement ARB_bindless_texture
Samuel Pitoiset [Mon, 3 Apr 2017 20:06:27 +0000 (22:06 +0200)]
mesa: implement ARB_bindless_texture

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agomesa/util: add a hash table wrapper which support 64-bit keys
Samuel Pitoiset [Mon, 12 Jun 2017 14:51:04 +0000 (16:51 +0200)]
mesa/util: add a hash table wrapper which support 64-bit keys

Needed for bindless handles which are represented using
64-bit unsigned integers. All hash table implementations should
be uniformized later on.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agomesa: move some hash declarations to hash.h
Samuel Pitoiset [Fri, 9 Jun 2017 11:58:56 +0000 (13:58 +0200)]
mesa: move some hash declarations to hash.h

These will be used by the bindless hash tables to initialize
the default deleted key value.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
7 years agomesa/util: add new util_dynarray_delete_unordered helper
Samuel Pitoiset [Mon, 29 May 2017 15:26:30 +0000 (17:26 +0200)]
mesa/util: add new util_dynarray_delete_unordered helper

This helper function will be used for managing dynamic arrays of
resident texture/image handles.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agomapi: add GL_ARB_bindless_texture entry points
Samuel Pitoiset [Mon, 3 Apr 2017 19:57:34 +0000 (21:57 +0200)]
mapi: add GL_ARB_bindless_texture entry points

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoclover/device: Get device/host unified memory from pipe driver
Aaron Watry [Sat, 3 Jun 2017 02:51:43 +0000 (21:51 -0500)]
clover/device: Get device/host unified memory from pipe driver

clinfo no longer reports my discrete GCN card as unified memory

Signed-off-by: Aaron Watry <awatry@gmail.com>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
7 years agogallium/radeon: Include the family name in the renderer string if it's not equal...
Henri Verbeet [Mon, 12 Jun 2017 23:39:02 +0000 (01:39 +0200)]
gallium/radeon: Include the family name in the renderer string if it's not equal to the marketing name.

The "family" name is often more informative than the "marketing" name. More
importantly, applications, like for example Wine, may recognise GPUs based on
the existing "family" names.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Signed-off-by: Henri Verbeet <hverbeet@gmail.com>
7 years agogallium/docs: clarify TGSI_SEMANTIC_SAMPLEMASK, again
Brian Paul [Mon, 12 Jun 2017 17:33:30 +0000 (11:33 -0600)]
gallium/docs: clarify TGSI_SEMANTIC_SAMPLEMASK, again

I've since discovered the fragment shader sample mask system value (which
corresponds to gl_SampleMaskIn).

v2: It's a system value, not a shader input.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agost/mesa: unmap the stream_uploader buffer before drawing
Brian Paul [Sat, 10 Jun 2017 03:21:12 +0000 (21:21 -0600)]
st/mesa: unmap the stream_uploader buffer before drawing

Some drivers require that the vertex buffers be unmapped prior to
drawing.  This change unmaps the stream_uploader buffer after we've
uploaded the zero-stride attributes (unless the driver supports
rendering with mapped buffers).

This fixes a regression in the VMware driver since 17f776c27be266f2.
Some Mesa demos such as mandelbrot and brick would display black
quads instead of the expected rendering.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agogallium/util: whitespace, formatting fixes in u_upload_mgr.c
Brian Paul [Sat, 10 Jun 2017 03:19:51 +0000 (21:19 -0600)]
gallium/util: whitespace, formatting fixes in u_upload_mgr.c

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoegl: improve dri2_fallback_swap_buffers_with_damage()
Eric Engestrom [Sun, 11 Jun 2017 22:09:44 +0000 (23:09 +0100)]
egl: improve dri2_fallback_swap_buffers_with_damage()

Let's (try to) set damages before swapping buffers.

Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
7 years agosoftpipe: Match pipe_context::render_condition prototype.
Jose Fonseca [Tue, 13 Jun 2017 10:52:16 +0000 (11:52 +0100)]
softpipe: Match pipe_context::render_condition prototype.

To silence compiler warnings.  Trivial.

7 years agollvmpipe: Match pipe_context::render_condition prototype.
Jose Fonseca [Tue, 13 Jun 2017 10:52:08 +0000 (11:52 +0100)]
llvmpipe: Match pipe_context::render_condition prototype.

To silence compiler warnings.  Trivial.

7 years agost_glsl_to_tgsi: init index to 0 before get_deref_offsets()
Samuel Pitoiset [Tue, 13 Jun 2017 08:03:52 +0000 (10:03 +0200)]
st_glsl_to_tgsi: init index to 0 before get_deref_offsets()

Fixes: 8ec4975cd83 ("st_glsl_to_tgsi: don't try and pass 32-bit values to get_deref_offsets")
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=101401
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-and-Tested-by: Michel Dänzer <michel.daenzer@amd.com>
7 years agoglsl: simplify an assertion in lower_ubo_reference
Nicolai Hähnle [Mon, 15 May 2017 06:34:24 +0000 (08:34 +0200)]
glsl: simplify an assertion in lower_ubo_reference

Struct types are now equal when they're structurally equal.

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
7 years agoglsl: simplify validate_intrastage_arrays
Nicolai Hähnle [Mon, 15 May 2017 06:32:21 +0000 (08:32 +0200)]
glsl: simplify validate_intrastage_arrays

Struct types are now equal when they are structurally equal.

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
7 years agoglsl: simplify varying matching
Nicolai Hähnle [Mon, 15 May 2017 06:30:51 +0000 (08:30 +0200)]
glsl: simplify varying matching

Unnamed struct types are now equal if they have the same field.

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
7 years agoglsl: remove redundant record_compare check when linking globals
Nicolai Hähnle [Sun, 14 May 2017 18:06:35 +0000 (20:06 +0200)]
glsl: remove redundant record_compare check when linking globals

Unnamed struct types are now equal across stages based on the fields they
contain, so overriding the type to make sure names match has become
unnecessary.

The check was originally introduced in commit 955c93dc089f ("glsl: Match
unnamed record types across stages.")

v2: clarify the commit message

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
7 years agoglsl: stop considering unnamed and named structures equal
Nicolai Hähnle [Sun, 14 May 2017 18:03:10 +0000 (20:03 +0200)]
glsl: stop considering unnamed and named structures equal

Previously, if an unnamed and a named struct contained the same fields,
they were considered the same type during linking of globals.

The discussion around commit e018ea81bf58 ("glsl: Structures must have
same name to be considered same type.") doesn't seem to have considered
this thoroughly, and I see no evidence that an unnamed struct should
ever be considered to be the same type as a named struct.

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
7 years agoglsl: give all unnamed structs the same name
Nicolai Hähnle [Fri, 12 May 2017 10:22:45 +0000 (12:22 +0200)]
glsl: give all unnamed structs the same name

As a result, unnamed structs defined in different places of the program
are considered the same types if they have the same fields in the same
order.

This will simplify matching of global variables whose type is an unnamed
struct.

It also fixes a memory leak when the same shader containing unnamed
structs is compiled over and over again: instead of creating a new type
each time, the existing type is re-used.

Finally, this does have the effect that some previously rejected programs
are now accepted, such as:

   struct {
      float a;
   } s1;

   struct {
      float a;
   } s2;

   s2 = s1;

C/C++ do not allow that, but GLSL does seem to want to treat unnamed
structs with the same fields as the same type at least during linking
(and apparently, some applications require it), so it seems odd to treat
them as different types elsewhere.

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
7 years agoglsl: do not add unnamed struct types to the symbol table
Nicolai Hähnle [Sun, 14 May 2017 17:59:27 +0000 (19:59 +0200)]
glsl: do not add unnamed struct types to the symbol table

We removed the need for lookups, and we will assign them all the same
name in the future.

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
7 years agoglsl: do not lookup struct types by typename
Nicolai Hähnle [Sun, 14 May 2017 17:58:53 +0000 (19:58 +0200)]
glsl: do not lookup struct types by typename

This changes the logic during the conversion of the declaration list

   struct S {
      ...
   } v;

from AST to IR, but should not change the end result.

When assigning the type of v, instead of looking `S' up in the symbol
table, we read the type from the member variable of ast_struct_specifier.

This change is necessary for the subsequent change to how anonymous types
are handled.

v2: remove a type override when redefining a structure; should be
    the same type in that case anyway

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
7 years agoglsl: fix a race condition when inserting new types
Nicolai Hähnle [Fri, 12 May 2017 10:37:00 +0000 (12:37 +0200)]
glsl: fix a race condition when inserting new types

By splitting glsl_type::mutex into two, we can avoid dropping the hash
mutex while creating the new type instance (e.g. struct/record,
interface).

This fixes a time-of-check/time-of-use race where two threads would
simultaneously attempt to create the same type but end up with different
instances of glsl_type.

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
7 years agost/mesa: skip texture validation logic when nothing has changed
Timothy Arceri [Sat, 10 Jun 2017 04:52:46 +0000 (14:52 +1000)]
st/mesa: skip texture validation logic when nothing has changed

Based on the same logic in the i965 driver 2f225f61451abd51 and
16060c5adcd4.

perf reports st_finalize_texture() going from 0.60% -> 0.16% with
this change when running the Xonotic benchmark from PTS.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agoac/gpu: drop duplicated code line.
Dave Airlie [Mon, 12 Jun 2017 23:47:00 +0000 (09:47 +1000)]
ac/gpu: drop duplicated code line.

has_hw_decode is assigned twice.

Pointed out by coverity.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Signed-off-by: Dave Airlie <airlied@redhat.com>
7 years agoradv: move assert down in radv_bind_descriptor_set
Dave Airlie [Mon, 12 Jun 2017 23:36:15 +0000 (09:36 +1000)]
radv: move assert down in radv_bind_descriptor_set

coverity complains about the deref before NULL check.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Signed-off-by: Dave Airlie <airlied@redhat.com>
7 years agoradv: return correct error on invalid handle from vkAllocateMemory
Dave Airlie [Mon, 12 Jun 2017 19:48:40 +0000 (05:48 +1000)]
radv: return correct error on invalid handle from vkAllocateMemory

Coverity pointed out this was returning uninitialised.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Signed-off-by: Dave Airlie <airlied@redhat.com>
7 years agost_glsl_to_tgsi: don't try and pass 32-bit values to get_deref_offsets
Dave Airlie [Mon, 12 Jun 2017 19:33:19 +0000 (05:33 +1000)]
st_glsl_to_tgsi: don't try and pass 32-bit values to get_deref_offsets

Just use a temporary 16-bit index.

This fixes coverity issue, pointed to me by Ilia.

Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
7 years agou_dynarray: fix coverity warning about ignoring return value from reralloc
Dave Airlie [Mon, 12 Jun 2017 19:50:18 +0000 (05:50 +1000)]
u_dynarray: fix coverity warning about ignoring return value from reralloc

>>>     Ignoring storage allocated by "reralloc_size(buf->mem_ctx, buf->data, buf->size)" leaks it.

Reviewed-by: Thomas Helland<thomashelland90@gmail.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
7 years agoglsl/lower_distance: only set max_array_access for 1D clip dist arrays
Dave Airlie [Sun, 11 Jun 2017 23:45:36 +0000 (00:45 +0100)]
glsl/lower_distance: only set max_array_access for 1D clip dist arrays

The max_array_access field applies to the first dimension, which means
we only want to set it for the 1D clip dist arrays.

This fixes an ir_validate assert seen with
KHR-GL44.cull_distance.functional
on nouveau and radeon with debug builds.

Fixes: a08c4ebbe (glsl: rewrite clip/cull distance lowering pass)
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Tested-by: Tobias Klausmann <tobias.johannes.klausmann@mni.thm.de>
Signed-off-by: Dave Airlie <airlied@redhat.com>
7 years agoi965: fix missing break
Lionel Landwerlin [Mon, 12 Jun 2017 09:32:36 +0000 (10:32 +0100)]
i965: fix missing break

Pretty obvious missing break statement.

CID: 1412564
Fixes: 641405f797 "i965: Use the new tracking mechanism for HiZ"
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed by: Elie Tournier <elie.tournier@collabora.com>

7 years agoradeonsi: pack si_context better
Marek Olšák [Fri, 9 Jun 2017 17:59:54 +0000 (19:59 +0200)]
radeonsi: pack si_context better

there isn't much to gain here

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoradeonsi: pack si_framebuffer better
Marek Olšák [Fri, 9 Jun 2017 17:51:36 +0000 (19:51 +0200)]
radeonsi: pack si_framebuffer better

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoradeonsi: pack si_sampler_view better
Marek Olšák [Fri, 9 Jun 2017 17:46:43 +0000 (19:46 +0200)]
radeonsi: pack si_sampler_view better

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoradeonsi: pack si_buffer_resources better
Marek Olšák [Fri, 9 Jun 2017 17:40:44 +0000 (19:40 +0200)]
radeonsi: pack si_buffer_resources better

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoradeonsi: pack struct si_descriptors better
Marek Olšák [Fri, 9 Jun 2017 17:36:13 +0000 (19:36 +0200)]
radeonsi: pack struct si_descriptors better

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoradeonsi: pack struct si_vertex_elements better
Marek Olšák [Fri, 9 Jun 2017 17:32:49 +0000 (19:32 +0200)]
radeonsi: pack struct si_vertex_elements better

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoradeonsi: replace si_vertex_elements::elements with separate fields
Marek Olšák [Fri, 9 Jun 2017 17:29:27 +0000 (19:29 +0200)]
radeonsi: replace si_vertex_elements::elements with separate fields

It makes si_vertex_elements a little smaller.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoradeonsi: rename si_vertex_element -> si_vertex_elements
Marek Olšák [Fri, 9 Jun 2017 17:33:24 +0000 (19:33 +0200)]
radeonsi: rename si_vertex_element -> si_vertex_elements

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoradeonsi: allocate si_state_rasterizer::pm4_poly_offset only when needed
Marek Olšák [Fri, 9 Jun 2017 17:21:18 +0000 (19:21 +0200)]
radeonsi: allocate si_state_rasterizer::pm4_poly_offset only when needed

Each element has over 700 bytes.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoradeonsi: pack si_state_rasterizer fields
Marek Olšák [Fri, 9 Jun 2017 17:17:25 +0000 (19:17 +0200)]
radeonsi: pack si_state_rasterizer fields

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoradeonsi: remove 8 bytes from si_shader_key with uint32_t ff_tcs_inputs_to_copy
Marek Olšák [Fri, 9 Jun 2017 15:26:27 +0000 (17:26 +0200)]
radeonsi: remove 8 bytes from si_shader_key with uint32_t ff_tcs_inputs_to_copy

The previous patch helps with this.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoradeonsi: use uint32_t to declare si_shader_key.opt.kill_outputs
Marek Olšák [Fri, 9 Jun 2017 15:25:29 +0000 (17:25 +0200)]
radeonsi: use uint32_t to declare si_shader_key.opt.kill_outputs

the next patch will benefit from this

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoradeonsi: remove 8 bytes from si_shader_key by flattening opt.hw_vs
Marek Olšák [Fri, 9 Jun 2017 15:15:07 +0000 (17:15 +0200)]
radeonsi: remove 8 bytes from si_shader_key by flattening opt.hw_vs

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoradeonsi: don't emit DB_STENCIL_CONTROL if it has no effect
Marek Olšák [Thu, 8 Jun 2017 00:42:53 +0000 (02:42 +0200)]
radeonsi: don't emit DB_STENCIL_CONTROL if it has no effect

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoradeonsi: fix missing num_L2_invalidates increment
Marek Olšák [Wed, 7 Jun 2017 23:32:51 +0000 (01:32 +0200)]
radeonsi: fix missing num_L2_invalidates increment

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoradeonsi: get rid of more compressed_colortex_mask names
Marek Olšák [Wed, 7 Jun 2017 20:29:10 +0000 (22:29 +0200)]
radeonsi: get rid of more compressed_colortex_mask names

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agogallium/noop: fix sampler views
Marek Olšák [Thu, 8 Jun 2017 00:26:28 +0000 (02:26 +0200)]
gallium/noop: fix sampler views

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agogallium/docs: clarify gen_name/get_vendor/get_device_vendor behavior
Marek Olšák [Wed, 7 Jun 2017 21:18:09 +0000 (23:18 +0200)]
gallium/docs: clarify gen_name/get_vendor/get_device_vendor behavior

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agost/mesa: call check_program_state only when needed
Marek Olšák [Wed, 7 Jun 2017 21:06:09 +0000 (23:06 +0200)]
st/mesa: call check_program_state only when needed

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agor600g: set pipe_context::priv = NULL
Marek Olšák [Wed, 7 Jun 2017 12:43:28 +0000 (14:43 +0200)]
r600g: set pipe_context::priv = NULL

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

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agovl,omx,va,vdpau,xvmc: don't set the priv pointer in context_create
Marek Olšák [Wed, 7 Jun 2017 12:47:13 +0000 (14:47 +0200)]
vl,omx,va,vdpau,xvmc: don't set the priv pointer in context_create

Unused and radeonsi ignores it anyway.

Acked-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agor600/eg: distribute egd_tables.py in the dist file
Juan A. Suarez Romero [Fri, 9 Jun 2017 14:57:26 +0000 (14:57 +0000)]
r600/eg: distribute egd_tables.py in the dist file

Otherwise, `make distcheck` will fail.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoi965: include gen4_blorp_exec.h into EXTRA_DIST
Juan A. Suarez Romero [Fri, 9 Jun 2017 14:01:25 +0000 (14:01 +0000)]
i965: include gen4_blorp_exec.h into EXTRA_DIST

Otherwise, `make distcheck` will fail.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
7 years agoi965: Call intel_prepare_render() from intel_update_state()
Kenneth Graunke [Fri, 9 Jun 2017 19:57:09 +0000 (12:57 -0700)]
i965: Call intel_prepare_render() from intel_update_state()

The resolve code looks at the current color draw buffers.  These are not
valid until intel_prepare_render() is called.  You can end up with one
color buffer bound, but where the renderbuffer has zero width/height and
no miptree allocated.

You can get a call chain like: _mesa_Clear -> _mesa_update_state ->
intel_update_state, where no brw driver hooks were called, so there is
no other point at which we could have called this.

Fixes crashes in KWin where Clear was causing intel_disable_rb_aux_buffer
to crash on irb != NULL but irb->mt == NULL.

According to Tapani, this also fixes crashes seen on Android.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Tested-by: Tapani Pälli <tapani.palli@intel.com>
7 years agoradv: fix trace dumping for !use_ib_bos
Grazvydas Ignotas [Sun, 11 Jun 2017 13:46:17 +0000 (16:46 +0300)]
radv: fix trace dumping for !use_ib_bos

Fixes trace dumping crash for SI or when RADV_DEBUG=noibs is set.

Fixes: 97dfff5410 "radv: Dump command buffer on hang."
Signed-off-by: Grazvydas Ignotas <notasas@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
7 years agoradv: don't even attempt to prefetch on SI
Grazvydas Ignotas [Sat, 10 Jun 2017 15:34:22 +0000 (18:34 +0300)]
radv: don't even attempt to prefetch on SI

Before bcae327469 this was emitting CP DMA packet even on SI, but
apparently hasn't caused too many problems. After that commit the
CP DMA code now always sets the CIK+ only bit for prefetch. Just
follow radeonsi there and don't try to prefetch at all.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=101334
Fixes: bcae327469 "radv: realign cp dma code with radeonsi"
Signed-off-by: Grazvydas Ignotas <notasas@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
7 years agoradv: assert on CP_DMA_USE_L2 for SI
Grazvydas Ignotas [Sat, 10 Jun 2017 15:20:13 +0000 (18:20 +0300)]
radv: assert on CP_DMA_USE_L2 for SI

The register header (and radeonsi comment) states V_411_SRC_ADDR_TC_L2
is for CIK+ only, so let's assert on earlier ASICs.

Signed-off-by: Grazvydas Ignotas <notasas@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
7 years agoegl/android: support for EGL_KHR_partial_update
Harish Krupo [Fri, 9 Jun 2017 14:43:34 +0000 (20:13 +0530)]
egl/android: support for EGL_KHR_partial_update

This patch adds support for the EGL_KHR_partial_update extension for
android platform. It passes 36/37 tests in dEQP for EGL_KHR_partial_update.
1 test not supported.

v2: add fallback for eglSetDamageRegionKHR (Tapani)

v3: The native_window_set_surface_damage call is available only from
    Android version 6.0. Reintroduce the ANDROID_VERSION guard and
    advertise extension only if version is >= 6.0. (Emil Velikov)

v4: use newly introduced ANDROID_API_LEVEL guard rather than
    ANDROID_VERSION guard to advertise the extension.The extension
    is advertised only if ANDROID_API_LEVEL >= 23 (Android 6.0 or
    greater). Add fallback function for platforms other than Android.
    Fix possible math overflow. (Emil Velikov)
    Return immediately when n_rects is 0. Place function's entrypoint
    in alphabetical order. (Eric Engestrom)

v5: Replace unnecessary calloc with malloc (Eric)
    Check for BAD_ALLOC error (Emil)
    Check for error in native_window_set_damage_region. (Emil, Tapani,
    Eric).

Signed-off-by: Harish Krupo <harish.krupo.kps@intel.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
7 years agogallium: fixed modulo zero crashes in tgsi interpreter (v2)
Marius Gräfe [Fri, 9 Jun 2017 13:39:00 +0000 (15:39 +0200)]
gallium: fixed modulo zero crashes in tgsi interpreter (v2)

softpipe throws integer division by zero exceptions on windows
when using % with integers in a geometry shader.

v2: Made error results consistent with existing div/mod zero handling in
    tgsi. 64 bit signed integer division by zero returns zero like in
    micro_idiv, unsigned returns ~0u like in micro_udiv.
    Modulo operations always set all result bits to one (like in
    micro_umod).

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
7 years agonir: make various getters take const pointers
Grazvydas Ignotas [Tue, 6 Jun 2017 23:19:15 +0000 (02:19 +0300)]
nir: make various getters take const pointers

This will allow to constify other things.

Signed-off-by: Grazvydas Ignotas <notasas@gmail.com>
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
7 years agoi965/cnl: Add a preliminary device for Cannonlake
Ben Widawsky [Thu, 11 May 2017 22:37:45 +0000 (15:37 -0700)]
i965/cnl: Add a preliminary device for Cannonlake

v2 (Anuj):
Rebased on master and updated pci ids
Remove redundant initialization of max_wm_threads to 64 * 12.
For gen9+ max_wm_threads are initialized in gen_get_device_info().

v3 (Anuj):
Move the patch to end of series.
Remove unused gt1, gt2, gt3 functions.
Remove l3_banks variable. Variable is now available on master.

Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Signed-off-by: Ben Widawsky <benjamin.widawsky@intel.com>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
7 years agoanv: Don't advertise support on anything above gen9
Jason Ekstrand [Fri, 9 Jun 2017 00:10:05 +0000 (17:10 -0700)]
anv: Don't advertise support on anything above gen9

This will prevent the driver from even trying to work on Cannon Lake
until we get actual support added.

Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
7 years agoi965/cnl: Enable CCS_E and RT support for few formats
Anuj Phogat [Tue, 25 Apr 2017 20:54:19 +0000 (13:54 -0700)]
i965/cnl: Enable CCS_E and RT support for few formats

Suggested-by: Jason Ekstrand <jason@jlekstrand.net>
Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
7 years agoi965/cnl: Reformat surface_format_info table to accomodate gen10+
Anuj Phogat [Tue, 25 Apr 2017 18:34:59 +0000 (11:34 -0700)]
i965/cnl: Reformat surface_format_info table to accomodate gen10+

Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Acked-by: Jason Ekstrand <jason@jlekstrand.net>
7 years agoi965/cnl: Make URB {VS, GS, HS, DS} sizes non multiple of 3
Anuj Phogat [Tue, 5 Jan 2016 16:41:39 +0000 (08:41 -0800)]
i965/cnl: Make URB {VS, GS, HS, DS} sizes non multiple of 3

v1: By Ben Widawsky <benjamin.widawsky@intel.com>
v2: v1 had an assert only for VS. Add the restriction for GS, HS and
    DS as well and make sure the allocated sizes are not multiple of 3.
v3: Move the entry_size checks in to compiler code (Ken)

Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
7 years agoi965/cnl: Don't resolve single sampled color rb in case of sRGB formats
Anuj Phogat [Thu, 27 Apr 2017 17:35:05 +0000 (10:35 -0700)]
i965/cnl: Don't resolve single sampled color rb in case of sRGB formats

As sRGB now supports lossless compression, we also need to stop resolving
single sampled color render buffers for sRGB formats in Gen 10.

Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
7 years agoi965/cnl: Implement depth count workaround
Ben Widawsky [Mon, 4 Jan 2016 18:48:39 +0000 (10:48 -0800)]
i965/cnl: Implement depth count workaround

Signed-off-by: Ben Widawsky <benjamin.widawsky@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
7 years agoi965/cnl: Start using CNL MOCS defines
Anuj Phogat [Mon, 15 May 2017 20:04:57 +0000 (13:04 -0700)]
i965/cnl: Start using CNL MOCS defines

CNL MOCS defines are duplicates of SKL MOCS defines.

Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Rafael Antognolli <rafael.antognolli@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>