Commit graph

45970 commits

Author SHA1 Message Date
Eric Anholt
0f1aae3ae7 intel: Fix unused variable warning. 2011-08-02 13:33:49 -07:00
Marek Olšák
e69dde5233 r600g: remove dummy function r600_bo_offset
Always returned 0.
2011-08-02 18:52:17 +02:00
Marek Olšák
f6df430a85 r600g: remove unused code 2011-08-02 18:52:17 +02:00
Marek Olšák
be7407b75b gallium/util: add functions for manipulating swizzles
Some of those have been in drivers already.
2011-08-02 18:49:30 +02:00
Ian Romanick
0290a018a5 i915: Only emit program errors when INTEL_DEBUG=wm or INTEL_DEBUG=fallbacks
This makes piglit a lot more happy.  The errors are logged when
INTEL_DEBUG=fallbacks because the application is about to hit a big
software fallback.  We frequently ask people to run applications that
are hitting software fallbacks with INTEL_DEBUG=fallbacks so the we
can help them debug the reason for the software fallback.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
2011-08-02 08:23:15 -07:00
Ian Romanick
3bb2f0dde1 i915: Fail without crashing if a Mesa IR program uses too many registers
This can only happen in GLSL shaders because assembly shaders that use
too many temps are rejected by core Mesa.  It is easiest to make this
happen with shaders that contain flow-control that could not be lowered.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
2011-08-02 08:23:15 -07:00
Ian Romanick
322c3bf9dc ir_to_mesa: Emit warnings instead of errors for IR that can't be lowered
Rely on the driver to do the right thing.  This probably means falling
back to software.  Page 88 of the OpenGL 2.1 spec specifically says:

    "A shader should not fail to compile, and a program object should
    not fail to link due to lack of instruction space or lack of
    temporary variables. Implementations should ensure that all valid
    shaders and program objects may be successfully compiled, linked
    and executed."

There is no provision for saying "No" to a valid shader that is
difficult for the hardware to handle, so stop doing that.

On i915 this causes a large number of piglit tests to change from FAIL
to WARN.  The warning is because the driver still emits messages to
stderr like "i915_program_error: Unsupported opcode: BGNLOOP".

It also fixes ES2 conformance CorrectFull_frag and CorrectParse1_frag
on i915 (and probably other hardware that can't handle loops).

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
2011-08-02 08:23:15 -07:00
Ian Romanick
8aadd89d07 ir_to_mesa: Use Add linker_error instead of fail_link
The functions were almost identical.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
2011-08-02 08:23:15 -07:00
Ian Romanick
89193933cb mesa: Ensure that gl_shader_program::InfoLog is never NULL
This prevents assertion failures in ralloc_strcat.  The ralloc_free in
_mesa_free_shader_program_data can be omitted because freeing the
gl_shader_program in _mesa_delete_shader_program will take care of
this automatically.

A bunch of this code could use a refactor to use ralloc a bit more
effectively.  A bunch of the things that are allocated with malloc and
owned by the gl_shader_program should be allocated with ralloc (using
the gl_shader_program as the context).

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
2011-08-02 08:23:15 -07:00
Ian Romanick
379a32f42e linker: Make linker_{error,warning} generally available
linker_warning is a new function.  It's identical to linker_error
except that it doesn't set LinkStatus=false and it prepends "warning: "
on messages instead of "error: ".

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
2011-08-02 08:23:01 -07:00
Ian Romanick
586e741ac1 linker: Make linker_error set LinkStatus to false
Remove the other places that set LinkStatus to false since they all
immediately follow a call to linker_error.  The function linker_error
was previously known as linker_error_printf.  The name was changed
because it may seem surprising that a printf function will set an
error flag.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
2011-08-02 08:21:43 -07:00
Kenneth Graunke
81b036b4d7 i965/gen5+: Fix incorrect miptree layout for non-power-of-two cubemaps.
For power-of-two sizes, h0 == mt->height0 since it's already a multiple
of two.  However, for NPOT, they're different; h1 should be computed
based on the original size.

Fixes piglit test "cubemap npot" and oglconform test "textureNPOT".

NOTE: This is a candidate for stable release branches.

Reviewed-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
2011-08-01 23:57:37 -07:00
Bryan Cain
189e9f12c7 glsl_to_tgsi: copy reladdr in st_src_reg(st_dst_reg) constructor
This is a glsl_to_tgsi port of commit f7cd9a858c.
2011-08-01 17:59:10 -05:00
Bryan Cain
3e7fce9773 glsl_to_tgsi: add each relative address to the previous
This is a glsl_to_tgsi port of commit d6e1a8f714.
2011-08-01 17:59:10 -05:00
Bryan Cain
10d31cb307 glsl_to_tgsi: lower all ir_quadop_vector expressions
Unlike Mesa IR, TGSI doesn't have a SWZ opcode.
2011-08-01 17:59:10 -05:00
Bryan Cain
3354a5b563 glsl_to_tgsi: rework immediate tracking to not use gl_program_parameter_list 2011-08-01 17:59:10 -05:00
Bryan Cain
f751730ad0 glsl_to_tgsi: update comments 2011-08-01 17:59:10 -05:00
Bryan Cain
a2c3b9f38d glsl_to_tgsi: make coding style more consistent 2011-08-01 17:59:10 -05:00
Bryan Cain
0da994a9f1 glsl_to_tgsi: make assignment hack safer
Fixes an assertion failure in piglit test glsl-texcoord-array.
2011-08-01 17:59:10 -05:00
Bryan Cain
7732822c83 glsl_to_tgsi: separate immediates from array constants during IR translation
Before, if any uniform or constant array was accessed with indirect
addressing, st_translate_program() would emit uniform constants in the place
of immediates.  This behavior was unavoidable with ir_to_mesa/mesa_to_tgsi, but
glsl_to_tgsi can work around it since the GLSL IR backend and the TGSI
emission are both inside the state tracker.
2011-08-01 17:59:09 -05:00
Bryan Cain
87f8d8547d glsl_to_tgsi: fix mistakes in get_pixel_transfer_visitor()
I noticed these issues while working on get_bitmap_visitor().
2011-08-01 17:59:09 -05:00
Bryan Cain
5f0b4b0e9d st/mesa, glsl_to_tgsi: support glBitmap with a GLSL fragment shader active 2011-08-01 17:59:09 -05:00
Bryan Cain
c0dcab2882 st/mesa, glsl_to_tgsi: support glDrawPixels/glCopyPixels with a GLSL fragment shader active
Since this was previously implemented using Mesa IR and _mesa_combine_programs,
this commit adds a new code path that works with glsl_to_tgsi.
2011-08-01 17:59:09 -05:00
Bryan Cain
33e0c47b05 glsl_to_tgsi: replace MAX_PROGRAM_TEMPS (256) with MAX_TEMPS (4096) 2011-08-01 17:59:09 -05:00
Bryan Cain
54db6e618e r200, r600c, i965: fix build 2011-08-01 17:59:09 -05:00
Bryan Cain
9c2810103d glsl_to_tgsi: always run copy_propagate() and eliminate_dead_code_advanced()
These two passes are written to handle indirect addressing properly.
2011-08-01 17:59:09 -05:00
Bryan Cain
4c8b6a2868 glsl_to_tgsi: fix mistake in new dead code elimination pass
The conditions of IF opcodes were not being counted as reads, which sometimes
led to the condition register being wrong or undefined.
2011-08-01 17:59:09 -05:00
Bryan Cain
f00406b68c glsl_to_tgsi: improve assignment handling
This is a hack, but it's better than emitting an unnecessary MOV instruction
and hoping the optimization passes clean it up.
2011-08-01 17:59:09 -05:00
Bryan Cain
71cbc9e3c4 glsl_to_tgsi: improve eliminate_dead_code_advanced() 2011-08-01 17:59:09 -05:00
Bryan Cain
3bd06e5b82 glsl_to_tgsi: use the correct writemask in try_emit_mad() and try_emit_sat() 2011-08-01 17:59:09 -05:00
Bryan Cain
194732fd72 glsl_to_tgsi: use a more specific condition for gl_FragDepth hack in generating assignments
This reduces the number of instructions in the fragment shader of
glsl-fs-atan-2 from 174 to 146 with EmitNoIfs enabled.
2011-08-01 17:59:09 -05:00
Bryan Cain
41472f7809 glsl_to_tgsi: add a better, more advanced dead code elimination pass 2011-08-01 17:59:08 -05:00
Bryan Cain
7ec7dd4fb6 glsl_to_tgsi: remove handling of XPD opcode in compile_tgsi_instruction()
The opcode is never emitted by the glsl_to_tgsi_visitor, so its special case in
compile_tgsi_instruction() was dead code.
2011-08-01 17:59:08 -05:00
Bryan Cain
8b881ad1c3 glsl_to_tgsi: use swizzle_for_size for src reg in conditional moves
This prevents the copy propagation pass from being confused by undefined
channels and thus missing optimization opportunities.
2011-08-01 17:59:08 -05:00
Emil Velikov
8c50f18b29 glsl_to_tgsi: execute merge_registers() after eliminate_dead_code()
Fixes a regression unintentionally introduced by "glsl_to_tgsi: fix shaders with
indirect addressing of temps" that caused missing leaves in 3dmark01 test 4 (Nature)
and missing/displaced textures on human models in Counter-Strike: Source.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Bryan Cain <bryancain3@gmail.com>
2011-08-01 17:59:08 -05:00
Bryan Cain
29d21417e3 glsl_to_tgsi: implement simplify_cmp pass needed by r300g 2011-08-01 17:59:08 -05:00
Bryan Cain
552cc48fca glsl_to_tgsi: fix compile error with g++ 4.6 2011-08-01 17:59:08 -05:00
Bryan Cain
1141c3f4c4 glsl: remove glsl_type::get_vec4_type()
Thanks to Kenneth Graunke for pointing out that glsl_type::get_instance(base, 4, 1)
is the same as glsl_type::get_vec4_type(base).

The function was only used in st_glsl_to_tgsi, and this commit replaces that usage
with get_instance.
2011-08-01 17:59:08 -05:00
Bryan Cain
b30bbd7436 glsl_to_tgsi: silence compiler warning 2011-08-01 17:59:08 -05:00
Bryan Cain
bf1cee9f24 glsl_to_tgsi: finish some loose ends 2011-08-01 17:59:08 -05:00
Bryan Cain
b2c067e307 glsl-to-tgsi: fix piglit tests
This commit fixes all of the piglit tests regressed by "mesa, glsl_to_tgsi: add
native support for integers in shaders" on softpipe.
2011-08-01 17:59:08 -05:00
Bryan Cain
b191382c60 mesa, glsl_to_tgsi: add native support for integers in shaders
Disabled by default on all drivers.  To enable it, change ctx->GLSLVersion to 130
in st_extensions.c.  Currently, softpipe is the only driver with integer support.
2011-08-01 17:59:08 -05:00
Bryan Cain
f95169deb4 tgsi: add support for TGSI_OPCODE_MOD in tgsi_exec 2011-08-01 17:59:08 -05:00
Bryan Cain
6d89abadbc mesa: support boolean and integer-based parameters in prog_parameter
The functionality is not used by anything yet, and the glUniform functions will
need to be reworked before this can reach its full usefulness.  It is
nonetheless a step towards integer support in the state tracker and classic drivers.
2011-08-01 17:59:07 -05:00
Bryan Cain
17b695e6e7 gallium: add PIPE_SHADER_CAP_INTEGERS 2011-08-01 17:59:07 -05:00
Bryan Cain
16d7a717d5 glsl_to_tgsi: fix shaders with indirect addressing of temps
Fixes several Piglit tests, although it's a step backwards for optimization.
2011-08-01 17:59:07 -05:00
Bryan Cain
56dc2c176c glsl_to_tgsi: use TGSI opcodes when converting from GLSL IR
Before, the translator used Mesa IR opcodes (a holdover from ir_to_mesa) and
converted them to TGSI opcodes during TGSI emission.
2011-08-01 17:59:07 -05:00
Bryan Cain
3b0858f1ae glsl_to_tgsi: support DDY (ir_unop_dFdy) 2011-08-01 17:59:07 -05:00
Bryan Cain
a6705aa5ca glsl_to_tgsi: lower noise opcodes when converting from GLSL IR, not when generating TGSI 2011-08-01 17:59:07 -05:00
Bryan Cain
5768ed6429 glsl_to_tgsi: define the sampler objects used
Fixes the Nexuiz title screen and the water in 0 A.D.
2011-08-01 17:59:07 -05:00