summaryrefslogtreecommitdiffstats
path: root/src/glsl
Commit message (Collapse)AuthorAgeFilesLines
* Merge remote-tracking branch 'mesa-public/master' into vulkanJason Ekstrand2015-11-2342-740/+2131
|\ | | | | | | This pulls in nir cloning and some much-needed upstream refactors.
| * nir/lower_tex: Add support for lowering texture swizzleJason Ekstrand2015-11-232-0/+80
| | | | | | | | Reviewed-by: Connor Abbott <[email protected]>
| * nir: Add a tex_instr_is_query helperJason Ekstrand2015-11-231-0/+25
| | | | | | | | Reviewed-by: Connor Abbott <[email protected]>
| * nir: Add a ssa_def_rewrite_uses_after helperJason Ekstrand2015-11-232-0/+51
| | | | | | | | Reviewed-by: Connor Abbott <[email protected]>
| * nir: Use instr/if_rewrite in nir_ssa_def_rewrite_usesJason Ekstrand2015-11-231-12/+4
| | | | | | | | | | | | | | nir_ssa_def_rewrite_uses is one of the older helpers in NIR and predated both of those. Now it can be substantially simplified. Reviewed-by: Connor Abbott <[email protected]>
| * nir/validate: Validated dests after sourcesJason Ekstrand2015-11-231-9/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | Previously, if someone accidentally made an instruction that refers to its own SSA destination, the validator wouldn't catch it. The reason for this is that it validated the destination too early and, by the time it got to the source, the destination SSA value was already added to the set of seen SSA values so it would assume that it came from some previous instruction. By moving destination validation to be after source validation, the SSA value is not in the list of seen values and the validator will catch self-referential instructions. Reviewed-by: Connor Abbott <[email protected]>
| * nir/lower_tex: Set the dest_type for txs instructionsJason Ekstrand2015-11-231-0/+1
| | | | | | | | Reviewed-by: Iago Toral Quiroga <[email protected]>
| * nir/lower_tex: Report progressJason Ekstrand2015-11-232-5/+16
| | | | | | | | | | Reviewed-by: Kenneth Graunke <[email protected]> Reviewed-by: Iago Toral Quiroga <[email protected]>
| * nir: s/nir_type_unsigned/nir_type_uintJason Ekstrand2015-11-235-44/+44
| | | | | | | | | | | | | | | | | | | | | | v2: do the same in tgsi_to_nir (Samuel) v3: added missing cases after rebase (Iago) v4: Add a blank space after '#' in one of the comments (Matt) Reviewed-by: Iago Toral Quiroga <[email protected]> Reviewed-by: Matt Turner <[email protected]>
| * nir/builder: only read meaningful channels in nir_swizzle()Connor Abbott2015-11-231-1/+1
| | | | | | | | | | | | | | | | | | | | This way the caller doesn't have to initialize all 4 channels when they aren't using them. v2: Fix signed/unsigned comparison warning (Iago) Reviewed-by: Iago Toral Quiroga <[email protected]> Reviewed-by: Matt Turner <[email protected]>
| * glsl: fix max binding validation for uniform blocksTimothy Arceri2015-11-231-2/+2
| | | | | | | | | | | | | | | | | | Regression as of 64710db66461e We can't use the type returned by get_interface_type() as the interface type has arrays removed. Reviewed-by: Emil Velikov <[email protected]>
| * nir: Add support for gl_HelperInvocation system value.Matt Turner2015-11-202-0/+5
| | | | | | | | Reviewed-by: Tapani Pälli <[email protected]>
| * glsl: add subroutine index qualifier supportTimothy Arceri2015-11-217-4/+83
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ARB_explicit_uniform_location allows the index for subroutine functions to be explicitly set in the shader. This patch reduces the restriction on the index qualifier in validate_layout_qualifiers() to allow it to be applied to subroutines and adds the new subroutine qualifier validation to ast_function::hir(). ast_fully_specified_type::has_qualifiers() is updated to allow the index qualifier on subroutine functions when explicit uniform locations is available. A new check is added to ast_type_qualifier::merge_qualifier() to stop multiple function qualifiers from being defied, before this patch this would cause a segfault. Finally a new variable is added to ir_function_signature to store the index. This value is validated and the non explicit values assigned in link_assign_subroutine_types(). Reviewed-by: Tapani Pälli <[email protected]>
| * glsl: add support for complie-time constant expressionsTimothy Arceri2015-11-215-164/+195
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch replaces the old interger constant qualifiers with either the new ast_layout_expression type if the qualifier requires merging or ast_expression if the qualifier can't have mulitple declarations or if all but the newest qualifier is simply ignored. We also update the process_qualifier_constant() helper to be similar to the one in the ast_layout_expression class, but in this case it will be used to process the ast_expression qualifiers. Global shader layout qualifier validation is moved out of the parser in this change as we now need to evaluate any constant expression before doing the validation. V2: Fix minimum value check for vertices (Emil) Reviewed-by: Emil Velikov <[email protected]>
| * glsl: add new type for compile time constantsTimothy Arceri2015-11-212-0/+80
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In this patch we introduce a new ast type for holding the new compile-time constant expressions. The main reason for this is that we can no longer do merging of layout qualifiers before they have been converted into GLSL IR so we need to store them to be proccessed later. The new type has two helper functions: - process_qualifier_constant() Used to merge and then evaluate qualifier expressions - merge_qualifier() Simply appends a qualifier to a list to be merged later by process_qualifier_constant() In order to avoid cascading error messages the process_qualifier_constant() helpers return a bool Reviewed-by: Emil Velikov <[email protected]>
| * glsl: call set_shader_inout_layout() earlierTimothy Arceri2015-11-211-3/+3
| | | | | | | | | | | | | | | | This will allow us to add error checking to this function in a later patch, if we don't move it the error messages will go missing. Reviewed-by: Emil Velikov <[email protected]>
| * glsl: replace binding layout min boundary checkTimothy Arceri2015-11-211-11/+12
| | | | | | | | | | | | | | Use new helper that will in a later patch allow for compile time constants. Reviewed-by: Emil Velikov <[email protected]>
| * glsl: encapsulate binding validation and settingTimothy Arceri2015-11-211-32/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change moves the binding layout handing code into an apply function to be consistent with other helper functions in the ast code, and to encapsulate the code so that when we introduce compile time constants the code will be much cleaner. One small downside is for unnamed interface blocks we will now be revalidating the binding for each member its applied to. However this seems a small sacrifice in order to have code which is readable. We also remove the incorrect comment in the named interface code about propagating bindings to members which seems to have been copied from the unnamed interface code. Reviewed-by: Emil Velikov <[email protected]>
| * glsl: move stream layout max validationTimothy Arceri2015-11-212-16/+19
| | | | | | | | | | | | | | | | | | This validation is moved later so we can validate the max value when compile time constant support is added in a later patch. Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]> Reviewed-by: Emil Velikov <[email protected]>
| * glsl: move stream layout qualifier validationTimothy Arceri2015-11-212-20/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We are moving this out of the parser in preparation for compile time constant support. The reason a validation function is used rather than an apply function like what is used with bindings is because glsl allows streams to be defined on members of blocks even though they must match the stream thats associated with the current block, this means we need access to the value after validation to do this comparision. V2: Fix typo in comment (Emil) Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]> Reviewed-by: Emil Velikov <[email protected]>
| * glsl: replace index layout min boundary checkTimothy Arceri2015-11-211-3/+6
| | | | | | | | | | | | | | | | Use new helper that will in a later patch allow for compile time constants. Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]> Reviewed-by: Emil Velikov <[email protected]>
| * glsl: remove duplicate validation for index layout qualifierTimothy Arceri2015-11-211-7/+1
| | | | | | | | | | | | | | | | | | The minimum value for index is validated in apply_explicit_location() and we want to remove validation from the parser so we can add compile time constant support. Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]> Reviewed-by: Emil Velikov <[email protected]>
| * glsl: move location layout qualifier validationTimothy Arceri2015-11-212-15/+15
| | | | | | | | | | | | | | | | We are moving this out of the parser in preparation for compile time constant support. Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]> Reviewed-by: Emil Velikov <[email protected]>
| * glsl: add process_qualifier_constant() helperTimothy Arceri2015-11-211-0/+17
| | | | | | | | | | | | | | | | | | For now this just validates that a qualifier is inside its minimum boundary, in a later patch we will expand it to evaluate compile time constants. Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]> Reviewed-by: Emil Velikov <[email protected]>
| * glsl: move builtin_type_macros.h into the correct listEmil Velikov2015-11-201-1/+1
| | | | | | | | | | | | | | Commit b9b40ef9b76 moved the file, but forgot to update the reference in the makefile. Thus the out of tree build was busted :\ Signed-off-by: Emil Velikov <[email protected]>
| * android: export the path of glsl nir headersMauro Rossi2015-11-201-1/+2
| | | | | | | | | | | | | | The change is necessary to avoid building errors in glsl and i965 modules due to missing glsl_types.h header Signed-off-by: Emil Velikov <[email protected]>
| * glsl: avoid linker and user varying location to overlapGregory Hainaut2015-11-201-3/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Current behavior on the interface matching: layout (location = 0) out0; // Assigned to VARYING_SLOT_VAR0 by user out1; // Assigned to VARYING_SLOT_VAR0 by the linker New behavior on the interface matching: layout (location = 0) out0; // Assigned to VARYING_SLOT_VAR0 by user out1; // Assigned to VARYING_SLOT_VAR1 by the linker v4: * Fix variable name in assert Signed-off-by: Gregory Hainaut <[email protected]> Reviewed-by: Timothy Arceri <[email protected]>
| * nir: Add nir_texop_samples_identical opcodeIan Romanick2015-11-193-1/+13
| | | | | | | | | | | | | | | | | | | | | | This is the NIR analog to GLSL IR ir_samples_identical. v2: Don't add the second nir_tex_src_ms_index parameter. Suggested by Ken and Jason. Signed-off-by: Ian Romanick <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]> Reviewed-by: Chris Forbes <[email protected]>
| * glsl: Add textureSamplesIdenticalEXT built-in functionsIan Romanick2015-11-191-0/+44
| | | | | | | | | | | | Signed-off-by: Ian Romanick <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]> Reviewed-by: Chris Forbes <[email protected]>
| * glsl: Add ir_samples_identical opcodeIan Romanick2015-11-198-1/+22
| | | | | | | | | | | | Signed-off-by: Ian Romanick <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]> Reviewed-by: Chris Forbes <[email protected]>
| * glsl: Extension tracking for EXT_shader_samples_indenticalIan Romanick2015-11-193-0/+6
| | | | | | | | | | | | Signed-off-by: Ian Romanick <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]> Reviewed-by: Chris Forbes <[email protected]>
| * nir: add nir_ssa_for_alu_src()Rob Clark2015-11-192-4/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Using something like: numer = nir_ssa_for_src(bld, alu->src[0].src, nir_ssa_alu_instr_src_components(alu, 0)); for alu src's with swizzle, like: vec1 ssa_10 = intrinsic load_uniform () () (0, 0) vec2 ssa_11 = intrinsic load_uniform () () (1, 0) vec2 ssa_2 = udiv ssa_10.xx, ssa_11 ends up turning into something like: vec1 ssa_10 = intrinsic load_uniform () () (0, 0) vec2 ssa_11 = intrinsic load_uniform () () (1, 0) vec2 ssa_13 = imov ssa_10 ... because nir_ssa_for_src() ignore's the original nir_alu_src's swizzle. Instead for alu instructions, nir_src_for_alu_src() should be used to ensure the original alu src's swizzle doesn't get lost in translation: vec1 ssa_10 = intrinsic load_uniform () () (0, 0) vec2 ssa_11 = intrinsic load_uniform () () (1, 0) vec2 ssa_13 = imov ssa_10.xx ... v2: check for abs/neg, and re-use existing nir_alu_src Signed-off-by: Rob Clark <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
| * nir: fix missing increments of num_inputs/num_outputsRob Clark2015-11-192-0/+4
| | | | | | | | | | | | | | | | | | | | | | Note: not quite perfect, we should use type_size vfunc (in compiler_options or nir_shader?) to determine how much we increment num_inputs/outputs/uniforms. But we don't have that yet, so let's at least fix things for the existing users of these passes. Signed-off-by: Rob Clark <[email protected]> Acked-by: Jason Ekstrand <[email protected]>
| * nir/print: show # of uniforms/inputs/outputsRob Clark2015-11-191-0/+4
| | | | | | | | Signed-off-by: Rob Clark <[email protected]>
| * nir/print: show shader name/label if setRob Clark2015-11-191-0/+6
| | | | | | | | | | Signed-off-by: Rob Clark <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
| * nir: add nir_var_all enumRob Clark2015-11-193-1/+6
| | | | | | | | | | | | | | | | | | Otherwise, passing -1 gets you: error: invalid conversion from 'int' to 'nir_variable_mode' [-fpermissive] Signed-off-by: Rob Clark <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
| * glsl: add a parse check to check for the index layout qualifierRyan Houdek2015-11-191-0/+5
| | | | | | | | | | | | | | This can only be used if EXT_blend_func_extended is enabled Reviewed-by: Ian Romanick <[email protected]> Reviewed-by: Ilia Mirkin <[email protected]>
| * glsl: add GL_EXT_blend_func_extended preprocessor defineRyan Houdek2015-11-191-0/+2
| | | | | | | | | | Reviewed-by: Ian Romanick <[email protected]> Reviewed-by: Ilia Mirkin <[email protected]>
| * glsl: add support for EXT_blend_func_extended builtinsRyan Houdek2015-11-192-0/+92
| | | | | | | | | | | | | | | | | | | | | | gl_MaxDualSourceDrawBuffersEXT - Maximum dual-source draw buffers supported For ESSL 1.0, it provides two builtins since you can't have user-defined color output variables: gl_SecondaryFragColorEXT gl_SecondaryFragDataEXT[MaxDSDrawBuffers] Reviewed-by: Ilia Mirkin <[email protected]>
| * glsl: add EXT_blend_func_extended parser enablesRyan Houdek2015-11-192-0/+8
| | | | | | | | | | | | | | | | | | This adds a state for the maximum dual source draw variables available and the variable for determining if the extension has been enabled in the program shaders. Reviewed-by: Ian Romanick <[email protected]> Reviewed-by: Ilia Mirkin <[email protected]>
| * glsl: fix ir_constant::equals() for doublesConnor Abbott2015-11-191-2/+7
| | | | | | | | | | Reviewed-by: Timothy Arceri <[email protected]> Reviewed-by: Edward O'Callaghan <[email protected]>
| * glsl: fix isinf() for doublesConnor Abbott2015-11-191-1/+10
| | | | | | | | | | Reviewed-by: Timothy Arceri <[email protected]> Reviewed-by: Edward O'Callaghan <[email protected]>
| * nir: fix constant folding of bfiConnor Abbott2015-11-191-2/+2
| | | | | | | | Reviewed-by: Edward O'Callaghan <[email protected]>
| * glsl: Fix off-by-one error in array size check assertionIan Romanick2015-11-181-2/+1
| | | | | | | | | | | | | | | | | | | | Apparently, this has been a bug since 2010 (c30f6e5d). Also use ARRAY_SIZE instead of open coding it. Signed-off-by: Ian Romanick <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]> Cc: [email protected]
| * glsl: Silence unused parameter warningsIan Romanick2015-11-181-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | builtin_functions.cpp:5289:52: warning: unused parameter 'num_arguments' [-Wunused-parameter] unsigned num_arguments, ^ builtin_functions.cpp:5290:52: warning: unused parameter 'flags' [-Wunused-parameter] unsigned flags) ^ Signed-off-by: Ian Romanick <[email protected]> Reviewed-by: Ilia Mirkin <[email protected]>
| * glsl: Silence ignored qualifier warningIan Romanick2015-11-181-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | I think the intention was to mark the "this" parameter as const, but const goes on the other end to do that. In file included from glsl_symbol_table.cpp:26:0: ast.h:339:35: warning: type qualifiers ignored on function return type [-Wignored-qualifiers] const bool is_single_dimension() ^ Signed-off-by: Ian Romanick <[email protected]> Reviewed-by: Timothy Arceri <[email protected]>
| * nir: Add support for cloning shadersJason Ekstrand2015-11-184-0/+682
| | | | | | | | | | | | | | | | This commit is heavily based on one by Rob Clark <[email protected]> but reworked to re-use nir_create functions and do less hashing. Signed-off-by: Jason Ekstrand <[email protected]> Reviewed-by: Rob Clark <[email protected]>
| * i965/nir: Validate that NIR passes call nir_metadata_preserve().Kenneth Graunke2015-11-182-0/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Failing to call nir_metadata_preserve() can have nasty consequences: some pass breaks dominance information, but leaves it marked as valid, causing some subsequent pass to go haywire and probably crash. This pass adds a simple validation mechanism to ensure passes handle this properly. We add a new bogus metadata flag that isn't used for anything in particular, set it before each pass, and ensure it *isn't* still set after the pass. nir_metadata_preserve will reset the flag, so correct passes will work, and bad passes will assert fail. (I would have made these functions static inline, but nir.h is included in C++, so we can't bit-or enums without lots of casting...) Thanks to Dylan Baker for the idea. Signed-off-by: Kenneth Graunke <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]> Reviewed-by: Iago Toral Quiroga <[email protected]>
| * nir: add array length fieldRob Clark2015-11-182-0/+10
| | | | | | | | | | | | | | | | This will simplify things somewhat in clone. Signed-off-by: Rob Clark <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]> Reviewed-by: Iago Toral Quiroga <[email protected]>
| * nir: remove nir_variable::max_ifc_array_accessRob Clark2015-11-182-22/+0
| | | | | | | | | | | | | | | | No users. Signed-off-by: Rob Clark <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]> Reviewed-by: Iago Toral Quiroga <[email protected]>