Commit Graph

320 Commits

Author SHA1 Message Date
Stefan Dösinger 6492622350 wined3d: sincos for vertex shaders.
SCS is unfortunately a fragment program only instruction. If we have the NV
extensions we can use SIN and COS. Otherwise we have to approximate sine and
cosine with a taylor series. Luckily we're provided with the necessary
constants by the application.
2009-05-27 11:56:53 +02:00
Stefan Dösinger 2f3faf4526 wined3d: Put some ARB declarations in the right place.
TMP_POS is only used in vertex shaders, declare it in the vshader
specific code. The sRGB constants are only used by pixel shaders, so
move them to the ps specific code, and avoid reading the stateblock.
2009-05-27 11:56:29 +02:00
Stefan Dösinger f484cbbf91 wined3d: Get rid of Tx hardcoding in texbem. 2009-05-27 11:56:07 +02:00
Stefan Dösinger da1b8d0c8e wined3d: Replace a few hardcoded Tx registers with proper name getters. 2009-05-27 11:56:01 +02:00
Stefan Dösinger 7fc4279cb8 wined3d: Implement DSX in ARB.
DSY is not that easy because we have to deal with the inverted coordinate
system in onscreen(!) rendering - see GLSL dsy.
2009-05-27 11:55:52 +02:00
Stefan Dösinger 122af07a30 wined3d: Implement SGN in ARB. 2009-05-21 16:17:52 +02:00
Stefan Dösinger 8e45e48b0c wined3d: Support vec4 A0 with NV_vertex_program2_option. 2009-05-21 16:17:52 +02:00
Stefan Dösinger d0756ee537 wined3d: Support ABS and ABSNEG with NV extensions if available. 2009-05-21 16:17:52 +02:00
Stefan Dösinger 01ec5068e2 wined3d: Add NV asm extension support to the ARB backend. 2009-05-21 16:17:51 +02:00
Stefan Dösinger 60f20a2f39 wined3d: Support ABS and ABSNEG in ARB. 2009-05-21 16:17:51 +02:00
Stefan Dösinger 7b1d48721d wined3d: Emulate the 4 component address register in ARB. 2009-05-20 10:55:17 +02:00
Stefan Dösinger 72e9e80f6e wined3d: Prepare for vec4 address registers in ARB. 2009-05-20 10:55:09 +02:00
Stefan Dösinger c7ca3793cc wined3d: Implement mova rounding in arb. 2009-05-20 10:55:03 +02:00
Stefan Dösinger bffb89101f wined3d: Fix srgb correction. 2009-05-20 10:54:56 +02:00
Stefan Dösinger e6cc81d287 wined3d: Get rid of the TMP register in fragment shaders.
To be able keep the temporary register in the type independent NRM
instruction, the vertex temporary register is renamed to TA to match
the name of a pixel shader register.
2009-05-20 10:54:50 +02:00
Stefan Dösinger ba35760f9f wined3d: Use CMP instead of SLT and SGE in sRGB correction.
This shortens the code and reduces the amount of temp regs used by 1.
2009-05-19 15:24:48 +02:00
Stefan Dösinger ad217029b0 wined3d: Get rid of TMP accesses in texm3x3* instructions. 2009-05-19 15:24:39 +02:00
Stefan Dösinger ced325f816 wined3d: Get rid of TMP access in texm3x2*.
texm3x2pad knows which register the following texm3x2depth or tex instruction
will use, and it knows that this register is uninitialized. So use it for
temporary storage instead of TMP.
2009-05-19 15:24:31 +02:00
Stefan Dösinger 17b001788f wined3d: Get rid of TMP2 and some easy TMP register uses.
We have 5 temporary registers declared for private use. We can get rid of two
of them.
2009-05-19 15:24:21 +02:00
Stefan Dösinger 4bf980962a wined3d: Only declare TMP_OUT in vertex shaders. 2009-05-19 15:24:13 +02:00
Stefan Dösinger d7f282f241 WineD3D: Support more constants in ARB shaders.
GL_LIMIT - 1 for vertex programs and the GL limit in fragment programs. The
indirect addressing limitation in GLSL applies here as well.
2009-05-18 13:59:31 +02:00
Stefan Dösinger c7839112c9 wined3d: Avoid declaring helper_const in vertex programs if possible. 2009-05-18 13:59:24 +02:00
Stefan Dösinger 2cb8f42168 wined3d: Support clipplanes with GLSL.
This is the Nth attemt to make clipping work with GLSL shaders. The patch now
uses the GLSL quirk table to handle cards that need a custom varying for
gl_ClipPos, and the code is adapted to the changed state table and shader
backend system.
2009-05-18 13:59:16 +02:00
Stefan Dösinger 45563979bd wined3d: Update the bump constants after a shader change.
Since we're using local constants now, we have to update the constants after a
shader change.
2009-05-18 13:58:57 +02:00
Stefan Dösinger 3372846aa6 wined3d: Use local constants for bump parameters.
This simplifies the loading code a bit. The constants were never
designed to be at the same location in all shaders, so there's no
point in using program.env. This way we don't collide with the d3d
shader constants and its easier to work together with NP2 fixups and
other shaders.
2009-05-18 13:58:47 +02:00
Stefan Dösinger 6fe1a5daa5 wined3d: Don't use TMP_COLOR unless srgb is enabled.
This was needed unconditionally in the past to apply fog, but since we're
using the ARBfp fog defines it is only needed if an sRGB correction is done
at the end of the shader.
2009-05-15 11:45:18 +02:00
Henri Verbeet b35e469d9d wined3d: Document functions that depend on the caller to do GL locking. 2009-05-15 10:25:41 +02:00
Stefan Dösinger 0123f81ce5 wined3d: Centralize WINED3DSPDM_SATURATE handling.
Besides the cleanup this patch will help to implement D3DSPDM_PARTIALPRECISION 
with GL_NV_vertex_program2_option / GL_NV_fragment_program_option.
2009-05-14 14:27:33 +02:00
Stefan Dösinger aeddd2da63 wined3d: Fix remaining incorrect dst register getters. 2009-05-14 14:27:25 +02:00
Stefan Dösinger bcb20ae96c wined3d: Fix a few more hardcoded pixel shader registers. 2009-05-14 14:27:19 +02:00
Stefan Dösinger 2327e316a2 wined3d: Tidy up pshader_hw_texreg2rgb and friends. 2009-05-14 14:27:14 +02:00
Stefan Dösinger 05cc344e7d wined3d: Tidy up pshader_hw_dp2add. 2009-05-14 14:27:07 +02:00
Stefan Dösinger ca1a979c69 wined3d: Tidy up pshader_hw_cmp. 2009-05-13 13:22:16 +02:00
Stefan Dösinger c06aa361e0 wined3d: Tidy up pshader_hw_cnd. 2009-05-13 13:22:11 +02:00
Stefan Dösinger 90526ce761 wined3d: Separate Tx tempregs from Tx varyings in ARB.
ps_1_3 uses Tx to pass in texture coordinates, but also as temporary
registers. ps_1_4 and ps_2_0 only use them for texture coordinates. This patch
gets rid of the Tx = fragment.texcoord[x] assign in all shader versions, and
doesn't even declare Tx in ps_1_4 and ps_2_0.

The <=ps_1_3 instructions know which kind of input they expect from the Tx
register, so the instruction handlers now know if they have to read the
tempreg Tx or the varying fragment.texcoord[x].
2009-05-13 13:22:04 +02:00
Stefan Dösinger fc5e511dda wined3d: Fix 1.4 pshader projection in ARB.
shader_arb_add_src_param handled DW and TXP undid it again. Remove DZ DW from
the modifiers and handle it in the instruction. DZ cannot be handled by TXP as
is, so move the .z component to .w and make it DW-like. Using SZW+TXP is
likely more efficient than the RCP, MUL, TEX we'd get if we let
shader_arb_add_src_param do the job.
2009-05-13 13:21:43 +02:00
Stefan Dösinger 45799fdc4e wined3d: Tidy up pshader_hw_tex.
Fix the indentation and replace the get_register_name with
shader_arb_get_dst_param.
2009-05-13 13:21:29 +02:00
Henri Verbeet 59689262e7 wined3d: Add missing GL locking to shader_backend_t.shader_free_private() implementations. 2009-05-13 12:01:48 +02:00
Henri Verbeet b5aee04023 wined3d: Add missing GL locking to fragment_pipeline.enable_extension() implementations. 2009-05-13 12:01:43 +02:00
Henri Verbeet fef4253171 wined3d: Pass a struct wined3d_shader_register to shader_arb_get_register_name(). 2009-05-12 11:17:45 +02:00
Stefan Dösinger 601030cfa9 wined3d: Standardize pshader_hw_texkill.
Use shader_arb_get_dst_param instead of get_register_name to find the register
name. Even though this adds support for modifiers(which aren't allowed by
native), this shouldn't hurt. If an app passes in an incorrect shader it
should be caught in the frontend.
2009-05-11 12:50:37 +02:00
Stefan Dösinger 5cfbfbc8b3 wined3d: Tidy up shader_hw_rsq_rcp. 2009-05-11 12:50:22 +02:00
Stefan Dösinger da47f68522 wined3d: Simplify shader_hw_map2gl.
Most of the extra work done in the pixel shader code was not needed or
redundant. This patch unifies the two paths.
2009-05-11 12:50:01 +02:00
Stefan Dösinger 7a1f9c84f1 wined3d: Get rid of the strcat in shader_arb_add_dst_param and make it shader_arb_get_dst_param. 2009-05-11 12:49:54 +02:00
Stefan Dösinger 48c2b0d669 wined3d: Merge shader_arb_add_src_param and pshader_gen_input_modifier_line.
Mostly based on the code of pshader_gen_input_modifier_line. The space-adding
behavior of shader_arb_add_src_param was removed because the plurality of
instruction handlers passes an uninitialized buffer in and expects a register
name written to its start, and only map2gl and rcp_rsq use the space-adding
stuff. I'll change rcp_rsq in a later patch anyway. I changed the name to
shader_arb_get_src_param to reflect this behavior.
2009-05-11 12:48:35 +02:00
Stefan Dösinger 7a1f305d42 wined3d: Get rid of pshader_gen_output_modifier_line.
Use shader_arb_add_instruction_modifiers instead. This avoids calling the
fixup function from each single instruction handler to handle shifts. It does
not yet get rid of the modifier handler in each instruction because we don't
want a separate line if we can just append _SAT to the instruction name.
2009-05-08 12:20:37 +02:00
Stefan Dösinger f025829449 wined3d: Pass the instr to pshader_gen_output_modifier_line. 2009-05-08 12:20:25 +02:00
Stefan Dösinger 2fd485ae31 winedd: Move shader_*_add_instruction_modifiers into the shader backend. 2009-05-08 12:20:18 +02:00
Stefan Dösinger 4daa3e5320 wined3d: Always declare single constants in ARB if rel addr is not used.
This is needed to raise the number of advertised constants to the GL
limit.  The ARB assembler ususally does not optimize away unused
constants, so we have to do this.
2009-05-08 12:15:26 +02:00
Henri Verbeet 5e473cb17f wined3d: Group register information into struct wined3d_shader_register. 2009-05-08 12:13:17 +02:00