mesa.git
11 years agoglsl: Calculate link-time uniform block data without using compile-time block data
Ian Romanick [Tue, 22 Jan 2013 04:57:45 +0000 (23:57 -0500)]
glsl: Calculate link-time uniform block data without using compile-time block data

Pretty much all of the compile-time, per-compilation unit block data is
about to get the axe.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
11 years agoglsl: Assert that interfaces, like structures, are not seen as leaf types
Ian Romanick [Tue, 22 Jan 2013 04:43:25 +0000 (23:43 -0500)]
glsl: Assert that interfaces, like structures, are not seen as leaf types

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Carl Worth <cworth@cworth.org>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
11 years agoglsl: Add new uniform_field_visitor::process variant
Ian Romanick [Tue, 22 Jan 2013 04:42:19 +0000 (23:42 -0500)]
glsl: Add new uniform_field_visitor::process variant

This flavor takes a type and a base name.  It will be used to handle
cases where the block name (instead of the instance name) is used for an
interface block.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Carl Worth <cworth@cworth.org>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
11 years agoglsl: Recurse into uniform blocks just like uniform structures
Ian Romanick [Tue, 22 Jan 2013 04:27:30 +0000 (23:27 -0500)]
glsl: Recurse into uniform blocks just like uniform structures

v2: Inspite of the spell checker, spell recurse correctly.  Suggested by
Carl Worth.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
11 years agoglsl: Handle instance array declarations
Ian Romanick [Tue, 22 Jan 2013 04:06:45 +0000 (23:06 -0500)]
glsl: Handle instance array declarations

v2: Add a comment and an assertion about the array size in the
non-instance name case.  Suggested by Paul Berry.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
11 years agoglsl: Track blocks in the symbol table using the glsl_type instead of the gl_uniform_...
Ian Romanick [Tue, 22 Jan 2013 04:01:33 +0000 (23:01 -0500)]
glsl: Track blocks in the symbol table using the glsl_type instead of the gl_uniform_block

Eventually the gl_uniform_block information won't be calculated until
linking.  Block names need to be checked for name clashes during
compiling, so we have to track it differently.

v2: Update the commit message.  Suggested by Carl Worth.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
11 years agoglsl: Add new uniform_field_visitor::visit_field variant
Ian Romanick [Tue, 22 Jan 2013 03:49:39 +0000 (22:49 -0500)]
glsl: Add new uniform_field_visitor::visit_field variant

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Carl Worth <cworth@cworth.org>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
11 years agoglsl: Modify uniform_field_visitor::visit_field to take a row_major parameter
Ian Romanick [Tue, 22 Jan 2013 03:41:13 +0000 (22:41 -0500)]
glsl: Modify uniform_field_visitor::visit_field to take a row_major parameter

Not used yet, but the UBO layout visitor will use this.

v2: Remove a spruious hunk.  This is moved to the patch "glsl: Remove
ir_variable::uniform_block".  Suggested by Carl Worth.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
11 years agoglsl: Modify uniform_field_visitor::recursion to take a row_major parameter
Ian Romanick [Tue, 22 Jan 2013 03:32:07 +0000 (22:32 -0500)]
glsl: Modify uniform_field_visitor::recursion to take a row_major parameter

Not used yet, but the UBO layout visitor will use this.

v2: Add some commentary as to why row_major is always set to false in
process.  Suggesed by Paul Berry.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Carl Worth <cworth@cworth.org>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
11 years agoglsl: Add a predicate to determine whether a variable is an interface block
Ian Romanick [Tue, 22 Jan 2013 03:18:16 +0000 (22:18 -0500)]
glsl: Add a predicate to determine whether a variable is an interface block

For the first declaration below, there will be an ir_variable named
"instance" whose type and whose instance_type will be the same
glsl_type.  For the second declaration, there will be an ir_variable
named "f" whose type is float and whose instance_type is B2.

"instance" is an interface instance variable, but "f" is not.

uniform B1 {
    float f;
} instance;

uniform B2 {
    float f;
};

v2: Copy the comment message documentation into the code.  Suggested by
Paul Berry.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Carl Worth <cworth@cworth.org>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
11 years agoglsl: Require that indices into uniform block arrays be constants
Ian Romanick [Tue, 22 Jan 2013 03:07:34 +0000 (22:07 -0500)]
glsl: Require that indices into uniform block arrays be constants

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Carl Worth <cworth@cworth.org>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
11 years agoglsl: Add ir_variable::interface_type field
Ian Romanick [Tue, 22 Jan 2013 02:51:15 +0000 (21:51 -0500)]
glsl: Add ir_variable::interface_type field

For variables that are in an interface block or are an instance of an
interface block, this is the GLSL_TYPE_INTERFACE type for that block.

Convert the ir_variable::is_in_uniform_block method added in the
previous commit to use this field instead of ir_variable::uniform_block.

v2: Fix the place-holder comment on ir_variable::interface_type.
Suggested by Paul Berry.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Carl Worth <cworth@cworth.org>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
11 years agoglsl: Add ir_variable::is_in_uniform_block predicate
Ian Romanick [Fri, 14 Dec 2012 20:00:14 +0000 (12:00 -0800)]
glsl: Add ir_variable::is_in_uniform_block predicate

The way a variable is tested for this property is about to change, and
this makes the code easier to modify.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Carl Worth <cworth@cworth.org>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
11 years agoglsl: Generate an interface type for uniform blocks
Ian Romanick [Tue, 11 Dec 2012 20:14:03 +0000 (12:14 -0800)]
glsl: Generate an interface type for uniform blocks

If the block has an instance name, add the instance name to the symbol
table instead of the individual fields.

Fixes the piglit test interface-name-access-without-interface-name.vert
for real.

v2: Update the comment before the assertion that interface block
definitions won't generate instructions.  Suggested by Paul Berry.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
11 years agoglsl: Add GLSL_TYPE_INTERFACE
Ian Romanick [Tue, 11 Dec 2012 20:11:16 +0000 (12:11 -0800)]
glsl: Add GLSL_TYPE_INTERFACE

Interfaces are structurally identical to structures from the compiler's
point of view.  They have some additional restrictions, and generally
GPUs use different instructions to access them.  Using a different base
type should make this a bit easier.

This commit also adds the glsl_type::interface_packing fields.  For
GLSL_TYPE_INTERFACE types, this will track the specified packing mode.
It is analogous to gl_uniform_buffer::_Packing.

v2: Add serveral missing GLSL_TYPE_INTERFACE cases in switch-statements.

v3: Add information about glsl_type::interface_packing.  Move row_major
checking in glsl_type::record_key_compare from this patch to the
previous patch.  Both suggested by Paul Berry.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
11 years agoglsl: Add row_major field to glsl_struct_field
Ian Romanick [Tue, 11 Dec 2012 20:09:32 +0000 (12:09 -0800)]
glsl: Add row_major field to glsl_struct_field

For now, this will always be false.  In the near future, an "interface"
type will be added that shares a lot of infrastructure with structures.

v2: Move row_major checking in glsl_type::record_key_compare from the
next patch to this patch.  Suggested by Paul Berry.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Carl Worth <cworth@cworth.org>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
11 years agoglsl: Refactor out processing of structure fields
Ian Romanick [Sun, 9 Dec 2012 01:38:30 +0000 (17:38 -0800)]
glsl: Refactor out processing of structure fields

This will soon also be used for processing interface block fields.

v2: Add a comment explaining the interface of
ast_process_structure_or_interface_block.  Suggested by Paul Berry.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Carl Worth <cworth@cworth.org>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
11 years agoglsl: Parse interface array size
Ian Romanick [Tue, 11 Dec 2012 20:13:30 +0000 (12:13 -0800)]
glsl: Parse interface array size

The size is parsed and stored in the AST, but it is not used yet.
Processing of the array size is added in the patch "glsl: Handle
instance array declarations"

v2: Update the commit message (suggested by Carl Worth).  Add a comment
to ast_uniform_block::array_size (suggested by Paul Berry).

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
11 years agoglsl: Parse non-array uniform block instance names in GLSL ES 3.00.
Kenneth Graunke [Wed, 28 Nov 2012 07:45:17 +0000 (23:45 -0800)]
glsl: Parse non-array uniform block instance names in GLSL ES 3.00.

In GLSL ES 3.00 (and GLSL 1.50), uniform blocks can have an associated
"instance name", which essentially namespaces the variables inside.

This patch adds basic parsing for this new feature, but doesn't yet hook
it up to actually do anything yet.

It does not support for arrays of interface blocks; a later commit will
take care of that.

This change temporarily regresses the piglit test
interface-name-access-without-interface-name.vert.  This shader failed
to compile before (the expected result), but it failed to compile for
the wrong reason.  This is not a real regression.

v2: Add some comments to ast_uniform_block::instance_name.  Suggested by
Paul Berry.

Reviewed-by: Carl Worth <cworth@cworth.org>
Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
11 years agoglsl: Refactor uniform block parser rules.
Kenneth Graunke [Wed, 28 Nov 2012 07:21:56 +0000 (23:21 -0800)]
glsl: Refactor uniform block parser rules.

The existing code has a lot of duplication; the only difference between
the two cases is whether we merge in an additional layout qualifier.

Apparently creating a layout_qualifieropt rule that can be empty causes
a lot of conflicts and confusion.  However, refactoring out the guts of
the ast_uniform_block creation works fine.

Reviewed-by: Carl Worth <cworth@cworth.org>
Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
11 years agolinker: Refactor intra-stage block compatabililty testing
Ian Romanick [Thu, 13 Dec 2012 10:25:34 +0000 (02:25 -0800)]
linker: Refactor intra-stage block compatabililty testing

Also slightly change the compatibility test.  Instead of comparing the
offsets of the block variables, compare the packing mode of the blocks.
Ideally we don't want to assign the offsets until a later stage of
linking.

This is put in a new file called link_uniform_blocks.cpp.  Some new
functions related to uniform blocks are going to live in that file as
well.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Carl Worth <cworth@cworth.org>
Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
11 years agomesa: Track the packing mode of a UBO in gl_uniform_buffer
Ian Romanick [Thu, 13 Dec 2012 10:13:30 +0000 (02:13 -0800)]
mesa: Track the packing mode of a UBO in gl_uniform_buffer

This allows the next patch to verify that two uniform blocks match
without first calculating the locations of the fields.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
11 years agoglsl: Replace most default cases in switches on GLSL type
Ian Romanick [Tue, 11 Dec 2012 20:56:03 +0000 (12:56 -0800)]
glsl: Replace most default cases in switches on GLSL type

This makes it easier to find switch-statements that need to be updated
after a new GLSL_TYPE_* is added because the compiler will generate a
warning.

Switch-statements that only had a small number of cases (e.g.,
everything in ir_constant_expression.cpp) were not modified.  I may
regret that decision when we eventually add support for doubles.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Carl Worth <cworth@cworth.org>
Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
11 years agoi965: Correct gen6+ guardband calculation.
Eric Anholt [Wed, 23 Jan 2013 22:30:05 +0000 (14:30 -0800)]
i965: Correct gen6+ guardband calculation.

Too much attention was paid to the first paragraphs, and not enough to
the last little note that "oh, by the way, the rendered things
themselves still have to be clipped to just 8192 wide/high".

Fixes GTF's clip.c test with 4096 or higher width on ivb, where one of
the triangles got the upper half of its pixels dropped.

Tested-by: Ian Romanick <ian.d.romanick@intel.com>
11 years agoi965: Use GL_RED for DEPTH_TEXTURE_MODE in ES 3.0 for unsized formats.
Kenneth Graunke [Wed, 23 Jan 2013 23:27:39 +0000 (15:27 -0800)]
i965: Use GL_RED for DEPTH_TEXTURE_MODE in ES 3.0 for unsized formats.

Khronos has apparently decided that depth textures with sized formats
(allowed with ARB_internalformat_query or ES 3.0) should be treated as
GL_RED, while unsized formats (an existing feature) should be treated
as GL_INTENSITY for compatibility with ES 2.0.

Ian is proposing changes to ARB_internalformat_query which will make
this actually legal and consistent.

A similar problem exists with GL 4.2, but we're going to ignore that
for the time being.

Tested on Ivybridge: no Piglit regressions; fixes 4 es3conform tests:
- depth_texture_fbo
- depth_texture_fbo_clear
- depth_texture_teximage
- depth_texture_texsubimage

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
11 years agoi965: Bump maximum supported ES2 context version to 3.0
Chad Versace [Wed, 21 Nov 2012 17:28:36 +0000 (09:28 -0800)]
i965: Bump maximum supported ES2 context version to 3.0

Since patch "i965: Validate requested GLES context version in
brwCreateContext", we have been able to create ES 3.0 contexts due to the
max version check.  So...bump the max version.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
11 years agoi965/Gen6+: Enable ARB_ES3_compatibility extension
Paul Berry [Tue, 7 Aug 2012 19:39:30 +0000 (12:39 -0700)]
i965/Gen6+: Enable ARB_ES3_compatibility extension

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
11 years agomesa/es3: Enable ES 3.0 API and shading language version
Ian Romanick [Wed, 8 Aug 2012 22:25:00 +0000 (15:25 -0700)]
mesa/es3: Enable ES 3.0 API and shading language version

v2: Add ARB_internalformat_query to the list of required extensions.

v3: Add OES_depth_texture_cube_map to the list of required extensions.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
11 years agoscons: Add imports.c to builtin_compiler build.
Vinson Lee [Fri, 25 Jan 2013 06:36:27 +0000 (22:36 -0800)]
scons: Add imports.c to builtin_compiler build.

Fixes build regression introduced by commit
eac030e38e3cdd4ed4534516e3d3a50c8a372719.

Signed-off-by: Vinson Lee <vlee@freedesktop.org>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=59835

11 years agoi965/fs/gen7: Fix fatal typo in unpackHalf2x16
Chad Versace [Fri, 25 Jan 2013 05:48:40 +0000 (21:48 -0800)]
i965/fs/gen7: Fix fatal typo in unpackHalf2x16

s/src/src_w/

That little typo, which sneaked into v4 of the previous patch, generates
incorrect fs code.

Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
11 years agoi965/fs/gen7: Emit code for GLSL 3.00 pack/unpack operations (v4)
Chad Versace [Wed, 9 Jan 2013 19:46:42 +0000 (11:46 -0800)]
i965/fs/gen7: Emit code for GLSL 3.00 pack/unpack operations (v4)

v2: Remove lewd comment. [for idr]
v3: - Optimize away tmp register for packHalf2x16. [for anholt, paul]
    - Improve comments. [for anholt, paul]
    - Reduce near-duplicate code by removing vec4_visitor emit_pack/unpack
      methods. [for chadv]
v4: Factor our UD/W register conversion into helper function. [for anholt]

Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> (v2)
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
11 years agoi965/vs/gen7: Emit code for GLSL ES 3.00 pack/unpack operations (v3)
Chad Versace [Wed, 9 Jan 2013 19:44:31 +0000 (11:44 -0800)]
i965/vs/gen7: Emit code for GLSL ES 3.00 pack/unpack operations (v3)

FIXME: This patch emits VS code that violates documented hardware
restrictions and then relies on undocumented behavior that results from
that violation.  This patch passes all tests, but should be fixed ASAP to
conform to the hardware documentation.

v2: Explain undocumented hardware behavior. Improve comments.
v3: Use ALU1 helper methods F32TO16() and F16TO32(). [for anholt]

Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> (v1)
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
11 years agoi965: Quote the PRM on a HorzStride subtlety
Chad Versace [Wed, 9 Jan 2013 19:40:29 +0000 (11:40 -0800)]
i965: Quote the PRM on a HorzStride subtlety

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
11 years agoi965: Add opcodes for F32TO16 and F16TO32
Chad Versace [Wed, 9 Jan 2013 19:35:47 +0000 (11:35 -0800)]
i965: Add opcodes for F32TO16 and F16TO32

The GLSL ES 3.00 operations packHalf2x16 and unpackHalf2x16 will emit
these opcodes.

- Define the opcodes BRW_OPCODE_{F32TO16,F16TO32}.
- Add the opcodes to the brw_disasm table.
- Define convenience functions brw_{F32TO16,F16TO32}.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Acked-by: Paul Berry <stereotype441@gmail.com>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
11 years agoi965: Lower the GLSL ES 3.00 pack/unpack operations (v2)
Chad Versace [Sat, 1 Dec 2012 00:49:21 +0000 (16:49 -0800)]
i965: Lower the GLSL ES 3.00 pack/unpack operations (v2)

On gen < 7, we fully lower all operations to arithmetic and bitwise
operations.

On gen >= 7, we fully lower the Snorm2x16 and Unorm2x16 operations, and
partially lower the Half2x16 operations.

v2:
  - Comment that scalarization is needed only for SOA code [for idr].
  - Replace switch-statement with if-statement [for idr].
  - Remove misplaced hunk from previous patch [found by idr].

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Matt Tuner <mattst88@gmail.com>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
11 years agoglsl: Add lowering pass for GLSL ES 3.00 pack/unpack operations (v4)
Chad Versace [Mon, 19 Nov 2012 23:15:32 +0000 (15:15 -0800)]
glsl: Add lowering pass for GLSL ES 3.00 pack/unpack operations (v4)

Lower them to arithmetic and bit manipulation expressions.

v2: Rewrite using ir_builder [for idr].
v3: Comment typos. [for mattst88]
v4: Fix arithmetic error in comments.
    Factor out a shift instruction.
    Don't heap allocate factory.instructions.
    [for paul]

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> (v2)
Reviewed-by: Matt Tuner <mattst88@gmail.com> (v3)
Reviewed-by: Paul Berry <stereotype441@gmail.com> (v4)
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
11 years agoglsl: Fix type-deduction for and/or/xor expressions
Chad Versace [Tue, 15 Jan 2013 20:16:12 +0000 (12:16 -0800)]
glsl: Fix type-deduction for and/or/xor expressions

In ir_expression's constructor, the cases for {bit,logic}_{and,or,xor}
failed to handle the case when both operands were vectors.

Note: This is a candidate for the stable branches.
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
11 years agoglsl: Reformat and/or/xor cases in ir_expression ctor
Chad Versace [Tue, 15 Jan 2013 20:11:37 +0000 (12:11 -0800)]
glsl: Reformat and/or/xor cases in ir_expression ctor

Replace tabs with spaces. According to docs/devinfo.html, Mesa's
indetation style is:
  indent -br -i3 -npcs --no-tabs infile.c -o outfile.c

This patch prevents whitespace weirdness in the next patch.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
11 years agoglsl/ir_builder: Add helpers for making if-statements
Chad Versace [Fri, 11 Jan 2013 23:53:11 +0000 (15:53 -0800)]
glsl/ir_builder: Add helpers for making if-statements

Add two overloaded variants of
    ir_if *if_tree()

The new functions allow one to chain together if-trees within a single C++
expression that resembles a real if-statement.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
11 years agoglsl/ir_builder: Add `enum writemask`
Chad Versace [Fri, 11 Jan 2013 22:54:28 +0000 (14:54 -0800)]
glsl/ir_builder: Add `enum writemask`

Using this enum improves the readibility of calls to assign(), whose third
argument is a writemask.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
11 years agoglsl/ir_factory: Add helper method for making an ir_constant
Chad Versace [Fri, 11 Jan 2013 23:46:24 +0000 (15:46 -0800)]
glsl/ir_factory: Add helper method for making an ir_constant

Add method ir_factory::constant.  This little method constructs an
ir_constant using the factory's mem_ctx.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
11 years agoglsl/ir_builder: Add more helpers for constructing expressions
Chad Versace [Fri, 11 Jan 2013 17:53:21 +0000 (09:53 -0800)]
glsl/ir_builder: Add more helpers for constructing expressions

Add the following functions, each of which construct the similarly named
ir expression:
    div, round_even, clamp

    equal, less, greater, lequal, gequal

    logic_not, logic_and, logic_or

    bit_not, bit_or, bit_and, lshift, rshift

    f2i, i2f, f2u, u2f, i2u, u2i

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
11 years agoglsl/ir_factory: Initialize members to NULL in constructor
Chad Versace [Wed, 16 Jan 2013 01:29:21 +0000 (17:29 -0800)]
glsl/ir_factory: Initialize members to NULL in constructor

This eliminates unexpected behavior due to unitialized values.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
11 years agoglsl: Evaluate constant GLSL ES 3.00 pack/unpack expressions (v3)
Chad Versace [Mon, 19 Nov 2012 19:14:24 +0000 (11:14 -0800)]
glsl: Evaluate constant GLSL ES 3.00 pack/unpack expressions (v3)

That is, evaluate constant expressions of the following functions:
  packSnorm2x16  unpackSnorm2x16
  packUnorm2x16  unpackUnorm2x16
  packHalf2x16   unpackHalf2x16

v2: Reuse _mesa_pack_float_to_half and its inverse to evaluate
    pack/unpackHalf2x16. [for idr]
v3: Whitespace fixes. [for mattst88]
    Don't cast neg floats directly to uint16; use an intermediate cast to
    int16. [for paul]

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> (v2)
Reviewed-by: Paul Berry <stereotype441@gmail.com>
Reviewed-by: Matt Tuner <mattst88@gmail.com>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
11 years agomesa: Remove rounding bias in _mesa_float_to_half()
Chad Versace [Thu, 17 Jan 2013 03:58:42 +0000 (19:58 -0800)]
mesa: Remove rounding bias in _mesa_float_to_half()

Not all float32 values can be exactly represented as a float16.
_mesa_float_to_half() rounded such intermediate float32 values to zero by
truncating unrepresentable bits in the mantissa.

This patch improves _mesa_float_to_half() by rounding intermediate float32
values to the nearest float16; when the float32 is exactly between two
float16 values we round to the one with an even mantissa. This behavior is
preferred over the old behavior because:
  - It has reduced bias relative to the old behavior.

  - It reproduces the behavior of real hardware: opcode F32TO16 in
    Intel's GPU ISA.

  - By reproducing the behavior of the GPU (at least on Intel hardware),
    compile-time evaluation of constant packHalf2x16 GLSL expressions will
    result in the same value as if the expression were executed on the GPU.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
11 years agomesa,glsl: Move round_to_even() from glsl to mesa/main (v2)
Chad Versace [Thu, 17 Jan 2013 03:49:40 +0000 (19:49 -0800)]
mesa,glsl: Move round_to_even() from glsl to mesa/main (v2)

Move round_to_even's definition to mesa/main so that _mesa_float_to_half()
can use it in order to eliminate rounding bias.

In additon to moving the fuction definition, prefix its name with "_mesa",
just as all other functions in mesa/main are prefixed.

v2: Fix Android build.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
11 years agoglsl/standalone_scaffolding: Add stub for _mesa_warning()
Chad Versace [Wed, 16 Jan 2013 20:56:34 +0000 (12:56 -0800)]
glsl/standalone_scaffolding: Add stub for _mesa_warning()

A subsequent patch will add mesa/main/imports.c as a dependency to the
compiler, which in turn requires that _mesa_warning() be defined.

The real definition of _mesa_warning() is in mesa/main/errors.c, but to
pull that file into the standalone scaffolding would require transitively
pulling in the dispatch tables.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Acked-by: Paul Berry <stereotype441@gmail.com>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
11 years agoglsl: Extend ir_expression_operation for GLSL 3.00 pack/unpack functions (v2)
Chad Versace [Mon, 19 Nov 2012 18:48:25 +0000 (10:48 -0800)]
glsl: Extend ir_expression_operation for GLSL 3.00 pack/unpack functions (v2)

For each function {pack,unpack}{Snorm,Unorm,Half}2x16, add a corresponding
opcode to enum ir_expression_operation.  Validate the new opcodes in
ir_validate.cpp.

Also, add opcodes for scalarized variants of the Half2x16 functions.  (The
code generator for the i965 fragment shader requires that all vector
operations be scalarized.  A lowering pass, to be added later, will
scalarize the Half2x16 functions).

v2: Fix assertion message in ir_to_mesa [for idr].

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Matt Tuner <mattst88@gmail.com>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
11 years agoglsl: Add IR lisp for GLSL ES 3.00 pack/unpack functions
Chad Versace [Wed, 9 Jan 2013 00:13:18 +0000 (16:13 -0800)]
glsl: Add IR lisp for GLSL ES 3.00 pack/unpack functions

For each of the following functions, add a declaration to
builtins/profiles/300es.glsl and create new file
builtins/ir/${funcname}.ir:

  packSnorm2x16  unpackSnorm2x16
  packUnorm2x16  unpackUnorm2x16
  packHalf2x16   unpackHalf2x16

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Matt Tuner <mattst88@gmail.com>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
11 years agoglsl: Fix typo in comment
Chad Versace [Tue, 8 Jan 2013 16:26:34 +0000 (08:26 -0800)]
glsl: Fix typo in comment

s/num_operands()/get_num_operands()/

Discovered because Eclipse failed to resolve the false reference.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
11 years agoi965/disasm: Fix horizontal stride of dest registers
Chad Versace [Wed, 23 Jan 2013 19:17:51 +0000 (11:17 -0800)]
i965/disasm: Fix horizontal stride of dest registers

The bug: The printed horizontal stride was the numerical value of the
  BRW_HORIZONTAL_$N enum.
The fix: Translate the enum before printing.

Note: This is a candidate for the stable releases.
Reviewed-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
11 years agointel: Fix glCopyTexSubImage on buffers whose width >= 32kbytes
Paul Berry [Fri, 25 Jan 2013 00:35:23 +0000 (16:35 -0800)]
intel: Fix glCopyTexSubImage on buffers whose width >= 32kbytes

When possible, glCopyTexSubImage calls are performed using the
hardware blitter.  However, according to the Ivy Bridge PRM, Vol1
Part4, section 1.2.1.2 (Graphics Data Size Limitations):

    The BLT engine is capable of transferring very large quantities of
    graphics data. Any graphics data read from and written to the
    destination is permitted to represent a number of pixels that
    occupies up to 65,536 scan lines and up to 32,768 bytes per scan
    line at the destination. The maximum number of pixels that may be
    represented per scan line’s worth of graphics data depends on the
    color depth.

With an RGBA32F color buffer (which has 16 bytes per pixel) this
imposes a maximum width of 2048 pixels.  Other pixel formats have
accordingly larger limits.

To make matters worse, if the pitch of the buffer is 32k or greater,
intel_copy_texsubimage's call to intelEmitCopyBlit will overflow
intelEmitCopyBlit's src_pitch and dst_pitch parameters (which are
16-bit signed integers).

We can conveniently avoid both problems by avoiding use of the blitter
when the miptree's pitch is >= 32k.

Fixes gles3conform "framebuffer_blit_functionality_magnifying_blit"
tests when the buffer width is equal to 8192.

Note: this is very similar to the recent patch "intel: Fix ReadPixels
on buffers whose width >= 32kbytes" except that it applies to
glCopyTexSubImage instead of glReadPixels.  In a future patch it would
be nice to refactor the code so that (a) overflow is avoided, and (b)
intelEmitCopyBlit is responsible for checking whether the blitter can
handle the width, so that all callers of intelEmitCopyBlit work
properly, rather than just these two.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
11 years agoglsl: Allow varying structs in GLSL ES 3.00 and GLSL 1.50.
Paul Berry [Fri, 4 Jan 2013 18:43:01 +0000 (10:43 -0800)]
glsl: Allow varying structs in GLSL ES 3.00 and GLSL 1.50.

Previously I thought that varying structs had been added to GLSL ES
3.00 by mistake, because chapter 11 of the GLSL ES 3.00 spec
("Counting of Inputs and Outputs") failed to mention how structs
should be handled.  Khronos has clarified
(https://cvs.khronos.org/bugzilla/show_bug.cgi?id=9828) that varying
structs are indeed required, and that chapter 11 will be modified to
indicate that the minimal reference packing algorithm flattens varying
structs to their individual components.

Mesa doesn't flatten varying structs to their individual components,
but this is ok, since it packs varyings of all kinds with no wasted
space at all (except where this is impossible due to differing
interpolation modes), so it will outperform the minimal reference
packing algorithm in all but the most pathological cases.

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
11 years agoglsl: Disable transform feedback of varying structs.
Paul Berry [Thu, 17 Jan 2013 21:45:30 +0000 (13:45 -0800)]
glsl: Disable transform feedback of varying structs.

It is not clear from the GLSL ES 3.00 spec how transform feedback is
supposed to apply to varying structs:

- There is no specification for how the structure is to be packed when
  it is recorded into the transform feedback buffer.

- There is no reasonable value for GetTransformFeedbackVarying to
  return as the "type" of the variable.

We currently have a Khronos bug requesting clarification on how this
feature is supposed to work
(https://cvs.khronos.org/bugzilla/show_bug.cgi?id=9856).

This patch just disables transform feedback of varying structs for
now; we can implement the proper behaviour once we find out from
Khronos what it is.

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
11 years agoglsl: Update lower_packed_varyings to handle varying structs.
Paul Berry [Fri, 11 Jan 2013 20:56:03 +0000 (12:56 -0800)]
glsl: Update lower_packed_varyings to handle varying structs.

This patch adds code to lower_packed_varyings to handle varyings of
type struct.  Varying structs are currently packed in the most naive
possible way (in declaration order, with no gaps), so there is a
potential loss of runtime efficiency.  In a later patch it would be
nice to replace this with a "flattening" approach (wherein a varying
struct is flattened to individual varyings corresponding to each of
its structure elements), so that the linker can align each structure
element independently.  However, that would require a significantly
more complex implementation.

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
11 years agoglsl: Generalize compute_packing_order for varying structs.
Paul Berry [Fri, 11 Jan 2013 20:56:03 +0000 (12:56 -0800)]
glsl: Generalize compute_packing_order for varying structs.

This patch paves the way for allowing varying structs by generalizing
varying_matches::compute_packing_order to handle any type of varying.
Previously, we packed in the order (vec4, vec2, float, vec3), with
matrices being packed according to the size of their columns.  Now, we
pack everything according to its number of components mod 4, in the
order (0, 2, 1, 3).

There is no behavioural change for vectors.  Matrices are now packed
slightly differently:

- mat2x2 gets assigned PACKING_ORDER_VEC4 instead of
  PACKING_ORDER_VEC2.  This is slightly better, because it guarantees
  that the matrix occupies a single varying slot.

- mat2x3 gets assigned PACKING_ORDER_VEC2 instead of
  PACKING_ORDER_VEC3.  This is kind of a wash.  Previously, mat2x3 had
  a 25% chance of having neither of its columns double parked, a 50%
  chance of having exactly one of its columns double parked, and a 25%
  chance of having both of its columns double parked.  Now it always
  has exactly one of its columns double parked.

- mat3x3 gets assigned PACKING_ORDER_SCALAR instead of
  PACKING_ORDER_VEC3.  This doesn't affect much, since in both cases
  there is no guarantee of how the matrix will be aligned.

- mat4x2 gets assigned PACKING_ORDER_VEC4 instead of
  PACKING_ORDER_VEC2.  This is slightly better for the same reason as
  in mat2x2.

- mat4x3 gets assigned PACKING_ORDER_VEC4 instead of
  PACKING_ORDER_VEC3.  This is slightly better for the same reason as
  in mat2x2.

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
11 years agoglsl: Disable structure splitting for shader ins/outs.
Paul Berry [Fri, 11 Jan 2013 21:34:40 +0000 (13:34 -0800)]
glsl: Disable structure splitting for shader ins/outs.

Previously, it didn't matter whether structure splitting tried to
split shader ins/outs, because structs were prohibited from being used
for shader ins/outs.  However, GLSL 3.00 ES supports varying structs.
In order for varying structs to work, we need to make sure that
structure splitting doesn't get applied to them, because if it does,
then the linker won't be able to match up varyings properly.

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
11 years agoglsl: Eliminate ambiguity between function ins/outs and shader ins/outs
Paul Berry [Fri, 11 Jan 2013 22:39:32 +0000 (14:39 -0800)]
glsl: Eliminate ambiguity between function ins/outs and shader ins/outs

This patch replaces the three ir_variable_mode enums:

- ir_var_in
- ir_var_out
- ir_var_inout

with the following five:

- ir_var_shader_in
- ir_var_shader_out
- ir_var_function_in
- ir_var_function_out
- ir_var_function_inout

This eliminates a frustrating ambiguity: it used to be impossible to
tell whether an ir_var_{in,out} variable was a shader in/out or a
function in/out without seeing where the variable was declared in the
IR.  This complicated some optimization and lowering passes, and would
have become a problem for implementing varying structs.

In the lisp-style serialization of GLSL IR to strings performed by
ir_print_visitor.cpp and ir_reader.cpp, I've retained the names "in",
"out", and "inout" for function parameters, to avoid introducing code
churn to the src/glsl/builtins/ir/ directory.

Note: a couple of comments in the code seemed to indicate that we were
planning for a possible future in which geometry shaders could have
shader-scope inout variables.  Our GLSL grammar rejects shader-scope
inout variables, and I've been unable to find any evidence in the GLSL
standards documents (or extensions) that this will ever be allowed, so
I've eliminated these comments.

Reviewed-by: Carl Worth <cworth@cworth.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
11 years agoglsl: Clean up case statement in builtin_variables.cpp's add_variable.
Paul Berry [Fri, 25 Jan 2013 00:11:08 +0000 (16:11 -0800)]
glsl: Clean up case statement in builtin_variables.cpp's add_variable.

The case statement purported to handle the addition of ir_var_const_in
and ir_var_inout builtin variables.  But no such variables exist.
This patch removes the unnecessary cases, and adds a comment
explaining why they're not needed.

Reviewed-by: Carl Worth <cworth@cworth.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
11 years agoi965/vs: Do headerless texturing for texelFetchOffset().
Kenneth Graunke [Tue, 22 Jan 2013 05:24:34 +0000 (21:24 -0800)]
i965/vs: Do headerless texturing for texelFetchOffset().

For texelFetchOffset(), we just add the texel offsets to the coordinate
rather than using the message header's offset fields.  So we don't
actually need a header on Gen5+.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
11 years agolibgl-xlib/build: Link with C++ when LLVM is used
Matt Turner [Wed, 23 Jan 2013 20:45:40 +0000 (12:45 -0800)]
libgl-xlib/build: Link with C++ when LLVM is used

Also link-in libX11 and libXext.

Tested-by: Brian Paul <brianp@vmware.com>
11 years agointel: Fix ReadPixels on buffers whose width >= 32kbytes
Paul Berry [Thu, 24 Jan 2013 18:43:38 +0000 (10:43 -0800)]
intel: Fix ReadPixels on buffers whose width >= 32kbytes

When possible, glReadPixels calls are performed using the hardware
blitter.  However, according to the Ivy Bridge PRM, Vol1 Part4,
section 1.2.1.2 (Graphics Data Size Limitations):

    The BLT engine is capable of transferring very large quantities of
    graphics data. Any graphics data read from and written to the
    destination is permitted to represent a number of pixels that
    occupies up to 65,536 scan lines and up to 32,768 bytes per scan
    line at the destination. The maximum number of pixels that may be
    represented per scan line’s worth of graphics data depends on the
    color depth.

With an RGBA32F color buffer (which has 16 bytes per pixel) this
imposes a maximum width of 2048 pixels.

To make matters worse, if the pitch of the buffer is 32k or greater,
intel_miptree_map_blit's call to intelEmitCopyBlit will overflow
intelEmitCopyBlit's src_pitch and dst_pitch parameters (which are
16-bit signed integers).

We can conveniently avoid both problems by avoiding the readpixels
blit path when the miptree's pitch is >= 32k.

Fixes gles3conform "half_float" tests when the buffer width is greater
than 2048.

Reviewed-by: Eric Anholt <eric@anholt.net>
Tested-by: Ian Romanick <ian.d.romanick@intel.com>
11 years agointel: callocing a 32 byte temp is silly, so don't
Ian Romanick [Thu, 24 Jan 2013 04:35:19 +0000 (23:35 -0500)]
intel: callocing a 32 byte temp is silly, so don't

I believe that the size used to vary, so the dynamic allocation is
necessary.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
11 years agost/mesa: implement ARB_internalformat_query v2
Marek Olšák [Sat, 19 Jan 2013 01:54:16 +0000 (02:54 +0100)]
st/mesa: implement ARB_internalformat_query v2

Reviewed-by: Brian Paul <brianp@vmware.com>
11 years agost/mesa: advertise OES_depth_texture_cube_map if GLSL 1.30 is supported
Marek Olšák [Mon, 21 Jan 2013 17:07:39 +0000 (18:07 +0100)]
st/mesa: advertise OES_depth_texture_cube_map if GLSL 1.30 is supported

Reviewed-by: Brian Paul <brianp@vmware.com>
11 years agost/dri: disallow recursion in dri_flush
Marek Olšák [Mon, 21 Jan 2013 15:19:41 +0000 (16:19 +0100)]
st/dri: disallow recursion in dri_flush

ST_FLUSH_FRONT may call driThrottle, which is implemented with dri_flush.
This prevents double flush as well as fence leaks caused by a recursion
in the middle of throttling.

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

Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Tested-by: Michel Dänzer <michel.daenzer@amd.com>
11 years agost/dri: add null-pointer check, remove duplicated local variable
Marek Olšák [Mon, 21 Jan 2013 14:48:55 +0000 (15:48 +0100)]
st/dri: add null-pointer check, remove duplicated local variable

Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Tested-by: Michel Dänzer <michel.daenzer@amd.com>
11 years agoRevert "Revert "targets/opencl: Link against libgallium.la instead of libgallium.a""
Tom Stellard [Fri, 18 Jan 2013 16:35:28 +0000 (16:35 +0000)]
Revert "Revert "targets/opencl: Link against libgallium.la instead of libgallium.a""

This reverts commit 7824ab807050c03c6df01c44774914dcbef88248.

Now that we force linking with LLVM shared libs when building clover,
we can link against libgallium.la with no problems.

11 years agoconfigure.ac: Force use of LLVM shared libs with --enable-opencl v2
Tom Stellard [Fri, 18 Jan 2013 16:26:12 +0000 (16:26 +0000)]
configure.ac: Force use of LLVM shared libs with --enable-opencl v2

If we build clover with LLVM static libraries, then clover and also each
pipe_*.so driver that is built will contain their own static copy of
LLVM.  The recent automake changes have uncovered a problem where
the pipe_*.so drivers try to use clover's LLVM symbols.  This causes
LLVM's static registry objects to be initialized each time
a pipe_*.so driver is loaded by clover.  Initializing these objects
multiple times is not allowed and leads to assertion failures in the
LLVM code.

We can avoid all these problems by having clover and all the pipe_*.so
drivers link against the same LLVM shared library.

https://bugs.freedesktop.org/show_bug.cgi?id=59334
https://bugs.freedesktop.org/show_bug.cgi?id=59534

v2:
  - Fix shared library detection when LLVM is built with CMake

11 years agoconfigure.ac: Compute the required llvm static libraries only once
Tom Stellard [Fri, 18 Jan 2013 15:08:28 +0000 (15:08 +0000)]
configure.ac: Compute the required llvm static libraries only once

In order to determine which static LLVM libraries are needed we pass
a list of components to llvm-config and it generates the list of
library dependencies for us.  The advantage of only calling llvm-config
one time is that it can determine if two components depend on the same
library and then add it to the output list only once.  The old practice
of having each driver call llvm-config to add its own dependencies to
$(LLVM_LIBS) caused many libraries to be added to this variable multiple
times.

11 years agoradeonsi: Fall back to dummy pixel shader instead of trying indirect addressing.
Michel Dänzer [Tue, 22 Jan 2013 16:08:24 +0000 (17:08 +0100)]
radeonsi: Fall back to dummy pixel shader instead of trying indirect addressing.

Indirect addressing isn't fully handled yet.

Fixes crashes with piglit tests using indirect addressing.

Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
11 years agoradeonsi: make sure copying of all texture formats is accelerated
Marek Olšák [Fri, 11 Jan 2013 11:14:28 +0000 (12:14 +0100)]
radeonsi: make sure copying of all texture formats is accelerated

[ Cherry-picked from r600g commit 7c371f46958910dd2ca9487c89af1b72bbfdada9 ]

Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
11 years agoradeonsi: Handle PIPE_FORMAT_L32A32_S/UINT for rendering.
Michel Dänzer [Tue, 22 Jan 2013 16:46:32 +0000 (17:46 +0100)]
radeonsi: Handle PIPE_FORMAT_L32A32_S/UINT for rendering.

Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
11 years agoradeonsi: Make sure to use float number format for packed float colour formats.
Michel Dänzer [Tue, 22 Jan 2013 16:05:08 +0000 (17:05 +0100)]
radeonsi: Make sure to use float number format for packed float colour formats.

These aren't covered by UTIL_FORMAT_TYPE_FLOAT.

Fixes 15 piglit (sub)tests.

Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
11 years agointel: Enable S3TC extensions always
Ian Romanick [Tue, 21 Aug 2012 22:33:04 +0000 (15:33 -0700)]
intel: Enable S3TC extensions always

Always enable the use of pre-compressed texture data.  The ability to
perform on-line compression still requires the presence of libtxc_dxtn
or an explicit driconf over-ride.  Applications that just want to submit
precompessed data when an on-line compressor is not available can look
for the GL_EXT_texture_compression_dxt1 and
GL_ANGLE_texture_compression_dxt[35] extensions.

v2: Only enable the extensions that do not require on-line compression
by default.  The previous statement "This should not impact many (if
any) real applications." proved to be false for at least Sauerbraten.
This application mostly submits pre-compressed data, but it also can
submit uncompressed data that it asks the driver to compress.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> [v1]
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> [v1]
Acked-by: Eric Anholt <eric@anholt.net> [v1]
Acked-by: Lee Salzman <lsalzman@gmail.com>
11 years agomesa: Like EXT_texture_compression_dxt1, advertise ANGLE_texture_compression_dxt...
Ian Romanick [Sat, 1 Dec 2012 20:10:08 +0000 (12:10 -0800)]
mesa: Like EXT_texture_compression_dxt1, advertise ANGLE_texture_compression_dxt in all APIs

This is technically outside the ANGLE spec, but it seems unlikely to
cause any harm.

v2: Simplify the extension checks by assuming the ANGLE extension will
always be enabled by any driver that enables the EXT.  Suggested by
Eric Anholt.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Acked-by: Lee Salzman <lsalzman@gmail.com>
11 years agomesa: Simplify _mesa_choose_tex_format handling of compressed formats
Ian Romanick [Tue, 22 Jan 2013 09:24:24 +0000 (04:24 -0500)]
mesa: Simplify _mesa_choose_tex_format handling of compressed formats

For non-generic compressed format we assert two things:

1. The format has already been validated against the set of available
   extensions.

2. The driver only enables the extension if it supports all of the
   formats that are part of that extension.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
11 years agomesa: Use a single flag for the S3TC extensions that don't require on-line compression
Ian Romanick [Sat, 1 Dec 2012 20:02:04 +0000 (12:02 -0800)]
mesa: Use a single flag for the S3TC extensions that don't require on-line compression

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Acked-by: Lee Salzman <lsalzman@gmail.com>
11 years agoi965: Use swizzles to force R, G, and B to 0.0 for ALPHA textures.
Carl Worth [Tue, 22 Jan 2013 21:29:01 +0000 (13:29 -0800)]
i965: Use swizzles to force R, G, and B to 0.0 for ALPHA textures.

Similar to the previous commit, we may be using a texture with actual RGBA
storage for the GL_ALPHA format, so force the color values to 0.0.

This commit fixes the following piglit (sub) tests:

EXT_texture_snorm/fbo-blending-formats
GL_ALPHA16_SNORM
        GL_ALPHA8_SNORM
GL_ALPHA_SNORM

Note: Haswell bypasses this swizzle code, so may require an independent fix
for this bug.

Reviewed-by: Eric Anholt <eric@anholt.net>
11 years agoi965: Use swizzles to force alpha to 1.0 for RED, RG, or RGB textures.
Carl Worth [Tue, 22 Jan 2013 21:25:37 +0000 (13:25 -0800)]
i965: Use swizzles to force alpha to 1.0 for RED, RG, or RGB textures.

We may be using a texture with actual RGBA storage for these formats, so force
the alpha value read to 1.0.

This commit fixes the following piglit (sub) tests:

ARB_texture_float/fb-blending-formats
GL_RGB16F_ARB
EXT_framebuffer_object/fbo-blending-formats
                GL_RGB10
GL_RGB12
        GL_RGB16
EXT_texture_snorm/fbo-blending-formats
GL_RGB16_SNORM
GL_RGB8_SNORM
GL_RGB_SNORM

These test improvements depend on the previous commit as well. That commit
smashes alpha to 1.0 for the case of ReadPixels (so fixes "FBO testing" as
reported by this test), while this commit smashes alpha to 1.0 for the case of
texturing (fixed the "window testing" as reported by this test).

Note: Haswell bypasses this swizzle code, so may require an independent fix
for this bug.

Reviewed-by: Eric Anholt <eric@anholt.net>
11 years agoReadPixels: Force ALPHA to 1 while rebasing RGBA values for GL_RGB format
Carl Worth [Mon, 21 Jan 2013 20:16:27 +0000 (12:16 -0800)]
ReadPixels: Force ALPHA to 1 while rebasing RGBA values for GL_RGB format

When performing a ReadPixels operation, we may be reading from a buffer that
stores alpha values, but that is actually representing a buffer with no alpha
channel. In this case, while rebasing the values, touch up all alpha values
read to 1.0.

This commit fixes the following piglit (sub) tests:

ARB_texture_float/fbo-colormask-formats
GL_RBG16F_ARB
EXT_texture_snorm/fbo-colormask-formats
GL_RGB16_SNORM
GL_RGB8_SNORM
GL_RGB_SNORM

It likely improves the results of other tests as well, but a PASS remains
elusive due to additional bugs.

Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
11 years agoi965: Examine _BaseFormat when deciding to perform xRGB_alpha fixups
Carl Worth [Mon, 21 Jan 2013 20:18:02 +0000 (12:18 -0800)]
i965: Examine _BaseFormat when deciding to perform xRGB_alpha fixups

The renderbuffer's Format field may have an alpha channel even when the
underlying _BaseFormat does not. This can happen when mesa chooses to use
RGBA16 for an RGB16 format, for example.

So look at _BaseFormat when deciding whether to fixup the blend factors.

This test improves the results of at least the following piglit tests:

EXT_frambebuffer_object/fbo-blending-formats
         {GL_RGB10, GL_RGB12, GL_RGB16}
EXT_texture_snorm/fbo-blending-formats
{GL_RGB16_SNORM, GLRGB8_SNORM, GL_RGB_SNORM}

But none of these actually change from FAIL to PASS yet. The R, G, and B probe
values are fixed with this commit, but the tests still fail because the alpha
values are still wrong.

Reviewed-by: Eric Anholt <eric@anholt.net>
11 years agoscons: Fix source lists parsing on Windows.
José Fonseca [Tue, 22 Jan 2013 20:54:17 +0000 (20:54 +0000)]
scons: Fix source lists parsing on Windows.

/ vs \ mismatch was causing .objs to be put in the source tree, causing
breakeage when doing different build types in the same tree (eg., debug
vs release).

Fix this by normalizing everything to / slashes.

It's probably a good idea to purge all .objs from source tree to prevent
issues completely.

11 years agoGL3.txt: i965 supports ARB_base_instance
Matt Turner [Wed, 23 Jan 2013 05:34:25 +0000 (21:34 -0800)]
GL3.txt: i965 supports ARB_base_instance

Added in commit cdd3f549.

11 years agowmesa: include api_exec.h to fix compilation
Brian Paul [Tue, 22 Jan 2013 23:42:54 +0000 (16:42 -0700)]
wmesa: include api_exec.h to fix compilation

11 years agodraw: fix MSVC divide-by-zero compilation error
Brian Paul [Tue, 22 Jan 2013 23:41:56 +0000 (16:41 -0700)]
draw: fix MSVC divide-by-zero compilation error

Kind of lame, but it works.

11 years agoi965: Implement the GL_ARB_base_instance extension.
Kenneth Graunke [Fri, 18 Jan 2013 19:11:10 +0000 (11:11 -0800)]
i965: Implement the GL_ARB_base_instance extension.

Thanks to Fredrik Höglund, all the hard work was already done.

Tested using a modified oglconform (that actually runs these tests on
our driver); it looks like there may be some bugs when using client
arrays.  All applicable non-compatibility tests passed.

For now, only enable it in core profiles.

Reviewed-by: Eric Anholt <eric@anholt.net>
Tested-by: Ian Romanick <idr@freedesktop.org>
11 years agoglsl/build: Build libglcpp and libglslcore in builtin_compiler
Matt Turner [Fri, 18 Jan 2013 07:51:04 +0000 (23:51 -0800)]
glsl/build: Build libglcpp and libglslcore in builtin_compiler

And reuse them if not cross compiling.

Tested-by: Andreas Boll <andreas.boll.dev@gmail.com>
11 years agoglsl/Makefile.sources: Correct BUILTIN_COMPILER_CXX_FILES
Matt Turner [Fri, 18 Jan 2013 07:28:42 +0000 (23:28 -0800)]
glsl/Makefile.sources: Correct BUILTIN_COMPILER_CXX_FILES

Squashed with two reverts:

Revert "android: Update for builtin_stubs.cpp move"

This reverts commit c0def90ede1e939173041b8785303de90f8fdc6c.

Revert "scons: Update for builtin_stubs.cpp"

This reverts commit 8ac4b82699ad0a59ae6ae6d3415702eaa5d4fe3b.

Tested-by: Andreas Boll <andreas.boll.dev@gmail.com>
Tested-on-Android-by: Chad Versace <chad.versace@linux.intel.com>
11 years agobuild: Use AX_PROG_FLEX
Matt Turner [Mon, 1 Oct 2012 20:28:51 +0000 (13:28 -0700)]
build: Use AX_PROG_FLEX

Tested-by: Andreas Boll <andreas.boll.dev@gmail.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=47248

11 years agobuild: Use AX_PROG_BISON
Matt Turner [Mon, 1 Oct 2012 20:11:30 +0000 (13:11 -0700)]
build: Use AX_PROG_BISON

No one tests yacc/byacc. Let's just request bison specifically.

Tested-by: Andreas Boll <andreas.boll.dev@gmail.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=46815

11 years agobuiltin_compiler/build: Use generated parser files
Matt Turner [Thu, 17 Jan 2013 22:40:21 +0000 (14:40 -0800)]
builtin_compiler/build: Use generated parser files

... instead of generating them again.

Tested-by: Andreas Boll <andreas.boll.dev@gmail.com>
11 years agoglsl/build: Build tests via the glsl Makefile
Matt Turner [Tue, 15 Jan 2013 19:45:40 +0000 (11:45 -0800)]
glsl/build: Build tests via the glsl Makefile

Tested-by: Andreas Boll <andreas.boll.dev@gmail.com>
11 years agoglsl/build: Build glcpp via the glsl Makefile
Matt Turner [Tue, 15 Jan 2013 06:00:08 +0000 (22:00 -0800)]
glsl/build: Build glcpp via the glsl Makefile

Removing the subdirectory recursion provides a small speed up.

Tested-by: Andreas Boll <andreas.boll.dev@gmail.com>
11 years agoglsl/build: Don't build builtin_compiler separately if not cross compiling
Matt Turner [Tue, 15 Jan 2013 00:16:00 +0000 (16:16 -0800)]
glsl/build: Don't build builtin_compiler separately if not cross compiling

Reduces the number of times that src/glsl/ is compiled when not cross
compiling.

Tested-by: Andreas Boll <andreas.boll.dev@gmail.com>
11 years agoglsl/build: Don't build glsl_compiler
Matt Turner [Mon, 14 Jan 2013 22:24:17 +0000 (14:24 -0800)]
glsl/build: Don't build glsl_compiler

Use glslparsertest from piglit instead.

Tested-by: Andreas Boll <andreas.boll.dev@gmail.com>
11 years agodraw: fix problem in screen-space interpolation clip code
Brian Paul [Mon, 21 Jan 2013 18:41:02 +0000 (11:41 -0700)]
draw: fix problem in screen-space interpolation clip code

I don't see how this could have ever worked right.

The screen-space interpolation code uses the vertex->data[pos_attr]
position which contain window coords.  But window coords are only
computed for the unclipped vertices; the clipped vertices have
undefined window coords (see draw_cliptest_tmp.h).

Use the vertex clip coords instead which are always defined.

Fixes http://bugs.freedesktop.org/show_bug.cgi?id=55476
(piglit fbo-blit-stretch failure on softpipe)

Note: This is a candidate for the 9.0 branch.

Reviewed-by: José Fonseca <jfonseca@vmware.com>
11 years agodraw: improve the clipper debug/printf code
Brian Paul [Mon, 21 Jan 2013 18:37:07 +0000 (11:37 -0700)]
draw: improve the clipper debug/printf code

Reviewed-by: José Fonseca <jfonseca@vmware.com>
11 years agodraw: add new debug code and comments in clip code template
Brian Paul [Mon, 21 Jan 2013 18:32:49 +0000 (11:32 -0700)]
draw: add new debug code and comments in clip code template

In debug builds, set clipped vertex window coordinates to NaN values
to help debugging.  Otherwise, we're just leaving the coordinate in clip
space and it's invalid to use it later expecting it to be a window coord.

Reviewed-by: José Fonseca <jfonseca@vmware.com>
11 years agoswrast: fix blit code's nearest/linear coordinate arithmetic
Brian Paul [Mon, 21 Jan 2013 15:59:25 +0000 (08:59 -0700)]
swrast: fix blit code's nearest/linear coordinate arithmetic

Fixes piglit's fbo-blit-stretch test.

Reviewed-by: José Fonseca <jfonseca@vmware.com>