Stefan Doesinger
0188f96dd2
wined3d: Implement EvictManagedResources.
2009-06-19 14:54:04 +02:00
Stefan Doesinger
b2f09fd204
wined3d: Emulate clipplanes in ARB if the NV extensions are not available.
...
This patch tries to find a free texture coordinate to load up to 4 clip
coordinates into the pixel shader, and uses KIL to throw away fragments
that are cut by a clipplane. If no free texture coordinate is found,
clipping is not done. If more than 4 clipplanes are used, only the first
4 are actually enabled. That should be pretty rare though.
2009-06-19 14:54:00 +02:00
Stefan Doesinger
7baf7c6518
wined3d: Implement vertex texture fetch in ARB.
2009-06-19 14:53:50 +02:00
Stefan Doesinger
f1e97cdfbc
wined3d: Don't run out of varyings because of clipplanes.
2009-06-19 14:53:43 +02:00
Stefan Doesinger
b53b5909ff
wined3d: Handle SM 3.0 varyings in ARB.
2009-06-19 14:53:20 +02:00
Henri Verbeet
dcc490e82f
wined3d: Don't load a rendertarget just because alpha test is enabled.
...
Unlike the depth test, the alpha test doesn't compare to the existing fragment
but against a reference value.
2009-06-19 13:52:47 +02:00
Henri Verbeet
51902b89fb
wined3d: Remove a redundant ActivateContext() call in IWineD3DSurfaceImpl_UnlockRect().
...
The various LoadLocation() handlers already take care of activating an
appropriate context.
2009-06-18 15:17:27 +02:00
Henri Verbeet
c7b684f345
wined3d: Simplify IWineD3DSurfaceImpl_LockRect() a bit.
2009-06-18 15:17:27 +02:00
Henri Verbeet
9f252cd815
wined3d: Remove some useless code in IWineD3DDeviceImpl_SetLightEnable().
2009-06-18 15:17:27 +02:00
Henri Verbeet
550a3bbf96
wined3d: Reuse the FBO for check_fbo_compat().
2009-06-18 15:17:27 +02:00
Henri Verbeet
41d93e1dd1
wined3d: Make sure we have a context in stretch_rect_fbo().
...
Specifically, in case the source surface was offscreen, we would sometimes to
GL calls without active context.
2009-06-18 15:17:27 +02:00
Stefan Doesinger
3aaa530ca9
wined3d: Properly load the y correction.
2009-06-18 15:17:26 +02:00
Stefan Doesinger
7d5285acc1
wined3d: Properly free srgb textures.
2009-06-18 15:17:26 +02:00
Michael Abbott
2e119a2718
wined3d: Remove division from inner loop.
2009-06-18 15:17:26 +02:00
Yann Droneaud
a203876cc7
wined3d: Improved ATI Radeon HD 4xxx detection.
2009-06-17 12:43:20 +02:00
Stefan Doesinger
c9ef1ed28c
wined3d: Deal with instructions that do not support _SAT.
2009-06-17 12:24:43 +02:00
Stefan Doesinger
a7b605af64
wined3d: Implement D3DSPDM_PARTIALPRECISION support.
2009-06-17 12:24:35 +02:00
Stefan Doesinger
dfd338de77
wined3d: Add modifier support to tex and friends.
2009-06-17 12:20:54 +02:00
Stefan Doesinger
7856c1c26f
wined3d: Fix texm3x3pad.
...
The register number is already in the name we got from get_register_name,
don't add it twice.
2009-06-17 12:20:48 +02:00
Stefan Doesinger
cd348ac897
wined3d: Use bitfields for reg_maps uses* members.
2009-06-17 12:19:45 +02:00
Stefan Doesinger
58c3a0c832
wined3d: Implement vpos and vface.
2009-06-17 12:19:31 +02:00
Stefan Doesinger
ae600fe0c8
wined3d: Implement texldl in ARB.
2009-06-17 12:19:15 +02:00
Henri Verbeet
60317d027a
wined3d: Avoid some unneeded rendertarget copies.
2009-06-17 12:13:07 +02:00
Henri Verbeet
8be020776b
wined3d: Avoid some unneeded depthstencil copies.
2009-06-17 12:13:07 +02:00
Henri Verbeet
2c009e4d87
wined3d: Only initialize unused components of varyings that are read.
2009-06-17 12:13:07 +02:00
Henri Verbeet
fccb3d82fd
wined3d: Fall back to backbuffer offscreen rendering if FBOs are unavailable.
...
Backbuffer appears to be a better choice than PBuffer at the moment, since
PBuffer appears to be somewhat broken.
2009-06-17 12:13:07 +02:00
Henri Verbeet
dad6c311ec
wined3d: Fix a typo.
2009-06-17 12:13:07 +02:00
Stefan Doesinger
4830a29101
wined3d: Implement texldd in ARB.
2009-06-16 13:57:34 +02:00
Stefan Doesinger
2f6a713805
wined3d: Use flags instead of bools to control shader_hw_sample.
2009-06-16 13:57:30 +02:00
Stefan Doesinger
e608ef856e
wined3d: Implement IFC in ARB.
2009-06-16 13:57:20 +02:00
Stefan Doesinger
dfefbcd00d
wined3d: Implement break and breakc.
2009-06-16 13:57:15 +02:00
Stefan Doesinger
c220bafa2c
wined3d: Unroll loops in ARB if needed.
...
This is needed to allow us to claim vs_2_0 support with plain
GL_ARB_vertex_program. vs_2_0 allows loops without breaks.
2009-06-16 13:57:04 +02:00
Henri Verbeet
23231d5a62
wined3d: Add format conversions for some depth stencil formats.
...
Although these formats aren't lockable, we still explicitly set the initial
surface data when creating the texture. Unfortunately that means we'll need
the conversion functions, even though all they'll ever convert will be zeroes.
2009-06-16 13:37:06 +02:00
Henri Verbeet
88162fabb8
wined3d: Get rid of the pointers in WINED3DSURFACE_DESC.
2009-06-15 13:42:29 +02:00
Henri Verbeet
fede35d1c5
wined3d: Introduce surface_calculate_size().
2009-06-15 13:42:28 +02:00
Henri Verbeet
5f581975dc
wined3d: Introduce surface_init() to handle most of the surface initialization.
2009-06-15 13:42:28 +02:00
Henri Verbeet
bbfdfb2f1f
wined3d: Introduce surface_gdi_cleanup().
2009-06-15 13:42:28 +02:00
Henri Verbeet
32613eb628
wined3d: Introduce surface_cleanup().
2009-06-15 13:42:28 +02:00
Henri Verbeet
7599520321
wined3d: Avoid checking depth/stencil and compressed formats in init_format_fbo_compat_info().
...
Checking these is somewhat pointless since they should never be
color-renderable according to the FBO spec. This patch also happens to avoid
dereferencing a NULL pointer inside fglrx.
2009-06-12 17:33:15 +02:00
Henri Verbeet
669891c817
wined3d: Respect the "srgb" parameter to IWineD3DSurfaceImpl_BindTexture().
...
This is mostly for consistency, standalone surfaces can't be used for
texturing, so in practice "srgb" should always be FALSE in this path.
2009-06-12 17:33:15 +02:00
Henri Verbeet
4bc6b376e0
wined3d: Remove the useless "resource_type" parameter from IWineD3DDevice::CreateSurface().
2009-06-12 17:33:15 +02:00
Henri Verbeet
8f67918f1d
wined3d: Use WINED3DFMT_FLAG_COMPRESSED instead of checking for specific formats.
2009-06-12 17:33:15 +02:00
Henri Verbeet
71e12ae936
wined3d: Use the compressed format info in IWineD3DBaseSurfaceImpl_LockRect().
2009-06-12 17:33:15 +02:00
Rico Schüller
3ea66d6026
wined3d: Don't allow a negative lock_count in buffer_Unmap.
2009-06-11 13:23:25 +02:00
Henri Verbeet
5fbf895da6
wined3d: Use the format info to calculate compressed surface pitch in IWineD3DBaseSurfaceImpl_GetPitch().
2009-06-11 11:53:55 +02:00
Henri Verbeet
da12ac05a4
wined3d: Use the format info to calculate compressed surface size in IWineD3DBaseSurfaceImpl_SetFormat().
2009-06-11 11:53:55 +02:00
Henri Verbeet
e255f971e4
wined3d: Use the format info to calculate compressed surface size in IWineD3DDeviceImpl_CreateSurface().
2009-06-11 11:53:55 +02:00
Henri Verbeet
1ad485ff83
wined3d: Improve some TRACEs in init_format_fbo_compat_info().
2009-06-11 11:53:54 +02:00
Henri Verbeet
b052c6e8aa
wined3d: Remove some redundant s3tc extension checks.
...
If the extension isn't available to surface shouldn't have been created. We
don't do extension checks for all the other formats either.
2009-06-11 11:53:54 +02:00
Stefan Dösinger
3f5936f6f7
wined3d: Don't set unloaded arrays to zero.
...
This causes memory corruption on MacOS, even if the app does not
reference undeclared arrays. Trying to avoid potential breakage in
broken apps which provoke undefined behavior is pointless if it causes
actual breakage in well-behaved apps (on ill-behaved drivers).
2009-06-10 11:52:58 +02:00
Stefan Dösinger
8e259d9fcd
wined3d: A small atifs bump map improvement.
...
Thanks to Roland Scheidegger from Tungsten Graphics for the suggestion to
replace the 2 movs + dp2add with two MADs, where one can conveniently be
coissued with the other dp2add.
2009-06-10 11:52:24 +02:00
Stefan Dösinger
258d99d289
wined3d: Implement dsy in ARB.
2009-06-10 11:52:15 +02:00
Stefan Dösinger
51cdc9d361
wined3d: Implement loops with the NV extensions.
2009-06-10 11:52:01 +02:00
Stefan Dösinger
298bd3c50d
wined3d: Store the bumpmap ARB constants in ARB structures.
2009-06-10 11:51:49 +02:00
Henri Verbeet
e83fa982ca
wined3d: Use the format info for doing compressed surface blits in BltFast().
2009-06-10 11:51:12 +02:00
Henri Verbeet
61fd875bb4
wined3d: Store compression information about compressed formats.
2009-06-10 11:51:04 +02:00
Henri Verbeet
9d71a5f1e0
wined3d: Round rows up to whole blocks for compressed surface blits in BltFast().
2009-06-10 11:50:57 +02:00
Henri Verbeet
a25e63c62d
wined3d: Check the correct extensions in d3dfmt_get_conv().
...
According to Stefan these are either typos or leftovers from using GL_HILO8_NV.
2009-06-10 11:50:44 +02:00
Henri Verbeet
5ac8a7b054
wined3d: Set explicitly sized internal formats for color key conversion in d3dfmt_get_conv().
2009-06-10 11:50:31 +02:00
Henri Verbeet
910455e435
wined3d: Add some FIXMEs about blitting with unsupported fixups.
2009-06-09 17:01:14 +02:00
Henri Verbeet
621da64245
wined3d: Get rid of the silly pointers in WINED3DVOLUME_DESC.
2009-06-09 17:01:14 +02:00
Henri Verbeet
08d95233e3
wined3d: Don't modify the internal format in d3dfmt_get_conv().
...
For most conversions the internal format is irrelevant. Color key conversions
are an exception, because they need to ensure an alpha channel is present.
2009-06-09 17:01:14 +02:00
Henri Verbeet
fcf6a27a9b
wined3d: Simplify some code in set_glsl_shader_program().
2009-06-09 17:01:14 +02:00
Henri Verbeet
a6dc31e442
wined3d: Avoid comparing shader compile args if the relevant shader isn't present.
2009-06-09 17:01:14 +02:00
Frank Richter
6136884120
d3d9: Fix bitmask for A2R10G10B10 format.
2009-06-08 16:22:18 +02:00
Gerald Pfeifer
6d1a76fb10
wined3d: Fix (and simplify) the ATI case in IWineD3DImpl_FillGLCaps.
2009-06-08 14:29:01 +02:00
Gerald Pfeifer
7856ac3c19
wined3d: Use & instead of && for bit test in IWineD3DDeviceImpl_CreateSurface().
2009-06-08 14:28:54 +02:00
Henri Verbeet
7422babd88
wined3d: Set FBO stencil attachments for relevant depth stencil formats.
2009-06-08 12:44:27 +02:00
Henri Verbeet
a2244051ef
wined3d: Use context_attach_depth_stencil_fbo() to clear FBO depth attachments.
2009-06-08 12:44:22 +02:00
Henri Verbeet
13aea3a131
wined3d: Use GL_DEPTH32F_STENCIL8 for WINED3DFMT_D24FS8.
2009-06-08 12:44:17 +02:00
Henri Verbeet
4bc2180821
wined3d: Use GL_DEPTH_COMPONENT32F for WINED3DFMT_D32F_LOCKABLE.
2009-06-08 12:44:13 +02:00
Henri Verbeet
d3bc045f26
wined3d: Add support for the ARB_depth_buffer_float extension.
2009-06-08 12:44:08 +02:00
Henri Verbeet
f8c4832276
wined3d: Use GL_DEPTH24_STENCIL8_EXT for depth stencil formats.
2009-06-05 15:19:56 +02:00
Henri Verbeet
d08f4fb5f5
wined3d: Add support for EXT_packed_depth_stencil.
2009-06-05 15:19:56 +02:00
Henri Verbeet
a5876bb91e
wined3d: Use FBOs for offscreen rendering by default.
2009-06-05 15:19:40 +02:00
Henri Verbeet
fb7531599f
wined3d: Only use stretch_rect_fbo() on surfaces that are FBO attachable.
2009-06-05 15:19:35 +02:00
Henri Verbeet
786408fb95
wined3d: Check FBO compatibility on all formats with a GL format.
...
Instead of just the ones that have a fallback specified.
2009-06-05 14:43:25 +02:00
Henri Verbeet
b93c3b3253
wined3d: Set texture filtering to NEAREST in check_fbo_compat().
2009-06-05 14:43:25 +02:00
Henri Verbeet
0571ebcee3
wined3d: Add extension detection to the GL format template table.
2009-06-05 14:43:25 +02:00
Henri Verbeet
a2440aed7e
wined3d: Add extension detection for ARB_depth_texture.
2009-06-05 14:43:25 +02:00
Henri Verbeet
daeb86d620
wined3d: Don't use the vertex/pixel shader when we're not supposed to.
...
This also avoids removing programs from lists they're not in in
delete_glsl_program_entry().
2009-06-05 14:43:25 +02:00
Henri Verbeet
cae6a32b08
wined3d: Check the result from wine_rb_get() before using it in WINE_RB_ENTRY_VALUE.
2009-06-05 14:43:25 +02:00
Henri Verbeet
a44f84fdf7
wined3d: Add a proper enum value for "no extension".
...
This would allow an extension check for ARB_COLOR_BUFFER_FLOAT to work.
2009-06-04 12:19:02 +02:00
Henri Verbeet
0a059aafbe
wined3d: Check FBO compatibility after the fixups are applied.
2009-06-04 12:18:47 +02:00
Henri Verbeet
faaea93573
wined3d: Remove WINED3DFMT_R16G16B16A16_SNORM from the GL formats template.
...
This entry obviously can't work correctly.
2009-06-04 12:18:42 +02:00
Henri Verbeet
0cf49767ad
wined3d: Remove entries without an internal format from the GL formats template.
2009-06-04 12:18:33 +02:00
Henri Verbeet
37bdcd6b9b
wined3d: Free priv->stack in shader_glsl_free().
2009-06-04 12:18:27 +02:00
Henri Verbeet
ad6279de9f
wined3d: Replace the wined3d hash table with the generic red-black tree.
2009-06-03 11:40:14 +02:00
Henri Verbeet
97f320a77b
wined3d: Introduce volumetexture_init() to handle most of the volume texture initialization.
2009-06-03 11:39:16 +02:00
Henri Verbeet
9e69b86a03
wined3d: Introduce volumetexture_cleanup().
2009-06-03 11:39:09 +02:00
Henri Verbeet
b0ba731bd5
wined3d: Introduce cubetexture_init() to handle most of the cube texture initialization.
2009-06-03 11:39:04 +02:00
Henri Verbeet
aabb51286d
wined3d: Introduce cubetexture_cleanup().
2009-06-03 11:38:55 +02:00
Henri Verbeet
5171a65d81
wined3d: Introduce texture_init() to handle most of the 2D texture initialization.
2009-06-03 11:38:50 +02:00
Stefan Dösinger
2afcb794f2
wined3d: Implement clipplanes in the ARB backend.
...
Using GL_NV_vertex_program2_option so far. If we're really desparate we can
handle some cases without the extension by using a custom varying and texkill
in the fragment program.
2009-06-02 12:09:54 +02:00
Stefan Dösinger
1276b090b4
wined3d: Update clipplanes on a shader-fixed function switch.
...
The view matrix that was set at the time the clipplane was applied is
hardcoded into the clipplane. With vertex shaders clip planes ignore
the view matrix in d3d. We implement that, but this also means that
the clip planes potentially change when we switch between vs and fixed
func.
2009-06-02 12:09:46 +02:00
Stefan Dösinger
dfc9141458
wined3d: Use condition code for sRGB write correction if available.
...
This gives a small performance improvement. Don't enable NVfp for it though,
because the NVfp penalty is bigger than the gain from this patch. But if NVfp
is enabled anyway, make use of it.
2009-06-02 12:09:38 +02:00
Stefan Dösinger
7e1100d0e4
wined3d: Handle LRP in vertex shaders.
...
The ARB "LRP" instruction is a fragment program only instruction. It is
however valid in vs_2_0+ vertex shaders, so we have to emulate it.
2009-06-02 12:09:26 +02:00
Henri Verbeet
22022cf8b3
wined3d: Create a texture_cleanup() function.
2009-06-02 11:57:22 +02:00
Henri Verbeet
451a416fcf
wined3d: Call resource_init() from basetexture_init().
2009-06-02 11:57:22 +02:00
Henri Verbeet
812ee5208c
wined3d: Partially revert 7433eb76b5
.
...
The write mask sizes for the input and output semantics can be different,
resulting in compilation failure.
2009-06-02 11:57:22 +02:00
Stefan Dösinger
38076e08ca
wined3d: Add a comment about texbem and X2D.
2009-06-01 16:16:00 +02:00
Stefan Dösinger
de12f880ce
wined3d: Don't enable the NV frag extensions if we don't need them.
...
Enabling the NV extensions occupies a temp register for some reason. Avoid
needlessly enabling it.
2009-06-01 16:16:00 +02:00
Stefan Dösinger
5a07bacd36
wined3d: Write result.color in one mov.
...
Otherwise the Nvidia assembler needs one temp reg.
2009-06-01 16:16:00 +02:00
Stefan Dösinger
050735be79
wined3d: Revert "WineD3D: use CMP instead of SLT and SGE in sRGB correction".
...
This reverts patch ba35760f9f
.
The original patch did not achive its goal, because CMP is a macro that is
expanded to SLT, SGE, MUL, MAD, at least on nvidia hardware. To make matters
worse, it uses a temporary register, and the assembler usually is not clever
enough to find a free temporary from the shader code. If we generate the code
outselves we can pick one of our temps for this job.
2009-06-01 16:16:00 +02:00
Stefan Dösinger
8665ee5906
wined3d: Use Rx registers for sRGB correction if possible.
...
This removes another reason to declare TA, TB and TC.
2009-06-01 16:16:00 +02:00
Stefan Dösinger
7168b62323
wined3d: Use NRM from GL_NV_fragment_program2 if available.
2009-05-29 11:27:51 +02:00
Stefan Dösinger
d8e219be75
wined3d: Avoid the TMP_COLOR mov in some cases.
...
Many 2.0 and 3.0 shaders end with a "mov oC0, rx". If sRGB writing is enabled,
the ARB backend writes to a TMP_COLOR temporary, and at the end of the shader
writes the sRGB corrected color to result.color. If oC0 is not partially
rewritten after the mov, we can ignore the mov, not declare TMP_COLOR at all,
and just use the rx register as input for the sRGB correction code. This saves
a temporary and an instruction.
2009-05-29 11:27:44 +02:00
Stefan Dösinger
da7176be2a
wined3d: Use DP2A or X2D for dp2add if available.
2009-05-29 11:27:29 +02:00
Stefan Dösinger
e2be741bc0
wined3d: Remove a MESA hack.
2009-05-29 11:27:23 +02:00
Stefan Dösinger
5f723bc44a
wined3d: Allocate the proper size for the lconst map.
2009-05-29 11:27:14 +02:00
Henri Verbeet
7433eb76b5
wined3d: Use the proper OUT swizzle in handle_ps3_input().
2009-05-29 11:26:54 +02:00
Henri Verbeet
5654544725
wined3d: Add device resources from resource_init().
...
This is consistent with removing them from resource_cleanup().
2009-05-29 11:26:44 +02:00
Henri Verbeet
5e0f541621
wined3d: Remove ResourceReleased() from the public device interface.
2009-05-29 11:26:38 +02:00
Henri Verbeet
d37472f27b
wined3d: Add missing ActivateContext calls to shader_destroy() implementations.
2009-05-29 11:26:32 +02:00
Louis Lenders
06936f04c0
wined3d: Fix CheckDeviceMultiSampleType when queried with D3DMULTISAMPLE_NONE.
2009-05-28 15:02:08 +02:00
Stefan Dösinger
e70c80add9
wined3d: Emulate if(bool) in ARB shaders.
2009-05-28 12:46:01 +02:00
Stefan Dösinger
e492dd858e
wined3d: Add a function around the handler table.
...
This reduces the number of methods in the shader backend(the instr
modifiers can be handled in that wrapper) and it will help flow
control emulation in the ARB backend.
2009-05-28 12:45:45 +02:00
Stefan Dösinger
aad92c0780
wined3d: Manage vs_compile_args in the backends.
2009-05-28 12:45:32 +02:00
Stefan Dösinger
814dd42f25
wined3d: Manage ps_compiled_shader in the backends.
2009-05-28 12:45:21 +02:00
Stefan Dösinger
8763f6eac5
wined3d: Make find_gl_vshader backend specific.
2009-05-28 12:45:10 +02:00
Stefan Dösinger
732a9a15d5
wined3d: Remove the forward declaration added in the last patch.
2009-05-28 12:44:59 +02:00
Stefan Dösinger
d0d681c81e
wined3d: Make find_gl_pshader backend private.
2009-05-28 12:44:43 +02:00
Stefan Dösinger
5865d9c01b
wined3d: Store the compile args in the compile context, not the shader.
2009-05-28 12:44:22 +02:00
Henri Verbeet
13a05caa97
wined3d: Remove the "declaration" parameter to IWineD3DDeviceImpl_CreateVertexShader().
...
Once upon a time this was used for creating fake vertex shader
attribute semantics for d3d8 shaders. We don't need this anymore since
device_stream_info_from_declaration() will use the vertex
declaration's output slot to load the data, if present. That also
avoids the potentially expensive matching of attribute semantics
between vertex shader and declaration for d3d8.
2009-05-28 12:42:18 +02:00
Henri Verbeet
fcf7844653
wined3d: Match the d3d10 name for WINED3DDECLUSAGE_POSITION.
...
I.e., make sure that if a SM4 shader uses SV_POSITION it ends up as position
data.
2009-05-28 12:42:18 +02:00
Henri Verbeet
3925cd5f15
wined3d: Use the output signature to setup SM4 vertex shader output semantics.
2009-05-28 12:42:18 +02:00
Stefan Dösinger
0629585c24
wined3d: Work around an ARBFP vs GLSL bug in Mac OS.
2009-05-27 11:57:54 +02:00
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
Henri Verbeet
2ee0d47a49
wined3d: Use strings for shader input/output semantics.
2009-05-27 11:12:12 +02:00
Henri Verbeet
19cb4594e3
wined3d: Use a separate structure for vertex shader attributes.
...
In D3D10 shaders input/output semantics are strings rather than predefined
types. Unfortunately, the code in vshader_get_input() can be performance
critical, depending on application behaviour. Since vshader_get_input() is
only relevant for d3d9 shaders anyway, just store the usage and usage_idx for
these shaders.
2009-05-27 11:12:07 +02:00
Henri Verbeet
e6efb797c3
wined3d: Make "packed_output" a bitmap.
2009-05-27 11:11:57 +02:00
Henri Verbeet
10fadadc54
wined3d: Use the "input_registers" bitmap for vertex shader attributes as well.
2009-05-27 11:11:53 +02:00
Henri Verbeet
664b17b9ee
wined3d: Make "packed_input" a bitmap.
2009-05-27 11:11:48 +02:00
Henri Verbeet
1ccfab171f
wined3d: Use SM3 shader limits for SM4.
...
This isn't completely right, since as far as I'm aware SM4 doesn't have shader
limits in the same sense as previous shader models, but this should do for now.
2009-05-26 13:50:08 +02:00
Henri Verbeet
f0e303b0f2
wined3d: Add the output signature to IWineD3DDevice_CreateVertexShader().
2009-05-26 13:49:55 +02:00
Henri Verbeet
2153b4d998
wined3d: Split the info log into separate lines.
2009-05-26 13:49:50 +02:00
Henri Verbeet
1d7845dd33
wined3d: Pass a proper format desc to resource_init() in IWineD3DDeviceImpl_CreateBuffer().
2009-05-26 13:49:37 +02:00
Louis Lenders
f55522ab6b
wined3d: Match device name string to windows one.
2009-05-25 14:21:56 +02:00
Henri Verbeet
6a9212a1b2
wined3d: Fix debug_d3dusagequery() to handle combinations of flags.
2009-05-25 11:23:53 +02:00
Henri Verbeet
7c2e91c592
wined3d: Fix debug_d3dusage() to handle combinations of flags.
2009-05-25 11:23:47 +02:00
Henri Verbeet
f347374470
wined3d: Remove some apparently leftover debug code.
2009-05-25 11:23:39 +02:00
Henri Verbeet
85107d81f4
wined3d: Remove some unnecessary forward declarations.
2009-05-25 11:23:32 +02:00
Chris Robinson
12799db349
wined3d: Decrement fbo_entry_count when one is removed from the list.
2009-05-25 11:22:25 +02:00
Chris Robinson
1d757fd6da
wined3d: Prevent erroneous FIXMEs on newer cards.
...
Cards that have 12 or more combined samplers can trigger a fixme if they have
the same amount of vertex samplers, even though it's plenty enough.
2009-05-25 11:22:13 +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
Robert Key
0cea80708f
wined3d: Remove HD 4800 "2048MB for X2 versions" comment.
2009-05-18 13:36:23 +02:00
Robert Key
cce62569df
wined3d: Fix ATI HD4800 being reported as ATI 9500.
2009-05-15 11:55:20 +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
5d63179404
wined3d: Remove some unused defines.
2009-05-15 10:25:48 +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
Henri Verbeet
3022a4a73c
wined3d: Add missing GL locking to check_fbo_compat().
2009-05-15 10:25:32 +02:00
Henri Verbeet
177d883d95
wined3d: Add missing GL locking to ffp_blit_set() and ffp_blit_unset().
2009-05-15 10:25:27 +02:00
Henri Verbeet
5bc449553b
wined3d: Add missing GL locking to d3dfmt_p8_upload_palette().
2009-05-15 10:25:22 +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
Henri Verbeet
318fb7036b
wined3d: Add missing GL locking to test_pbo_functionality().
2009-05-14 11:12:57 +02:00
Henri Verbeet
639b258200
wined3d: Add missing GL locking to IWineD3DDeviceImpl_Uninit3D().
2009-05-14 11:12:52 +02:00
Henri Verbeet
e260132701
wined3d: Add missing GL locking to set_blit_dimension() calls.
2009-05-14 11:12:46 +02:00
Henri Verbeet
1070e075e4
wined3d: Add missing GL locking to calls to FBO functions.
2009-05-14 11:12:38 +02:00
Henri Verbeet
12c4af8dd8
wined3d: Add missing GL locking to delete_glsl_program_entry() calls.
2009-05-14 11:12:30 +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
Francois Gouget
514c5f2648
wined3d: Make surface_force_reload() static.
2009-05-13 12:45:36 +02:00
Henri Verbeet
b7ac22004f
wined3d: Add missing GL locking to shader_backend_t.shader_select() calls.
2009-05-13 12:01:57 +02:00
Henri Verbeet
7f14ea01c6
wined3d: Add missing GL locking to state table calls.
2009-05-13 12:01:52 +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
91c3a5eac1
wined3d: Directly call basetexture_apply_state_changes().
...
All the implementations of IWineD3DBaseTexture::ApplyStateChanges() forward to
basetexture_apply_state_changes().
2009-05-13 11:55:01 +02:00
Rico Schüller
2ef751883d
wined3d: Add UnregisterClass() on DLL_PROCESS_DETACH.
2009-05-12 12:33:57 +02:00
Henri Verbeet
0d446053da
wined3d: Don't create more than WINED3D_MAX_FBO_ENTRIES FBO entries.
...
This essentially turns the FBO entry list into an LRU cache.
2009-05-12 11:18:15 +02:00
Henri Verbeet
cad271f13d
wined3d: Print the correct limit in a WARN().
2009-05-12 11:18:08 +02:00
Henri Verbeet
adc9bfe3fd
wined3d: Pass a struct wined3d_shader_register to shader_record_register_usage().
2009-05-12 11:18:02 +02:00
Henri Verbeet
2039702035
wined3d: Pass a struct wined3d_shader_register to shader_dump_register().
2009-05-12 11:17:56 +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
Henri Verbeet
9a579a43b1
wined3d: Use the output signature to map SM4 pixel shader outputs to the appropriate register.
2009-05-11 12:43:00 +02:00
Henri Verbeet
d2409581e0
wined3d: Record register usage only once.
2009-05-08 18:16:48 +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
668328a697
wined3d: Work around a bad crash in fglrx.
2009-05-08 12:16:50 +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
Stefan Dösinger
f9276a6429
wined3d: Keep track of used float constants.
2009-05-08 12:15:15 +02:00
Henri Verbeet
69cbb57bfd
wined3d: Add support for immediate constants to the GLSL backend.
2009-05-08 12:13:49 +02:00
Henri Verbeet
96005c0fca
wined3d: Pass a struct wined3d_shader_register to shader_is_scalar().
2009-05-08 12:13:46 +02:00
Henri Verbeet
4a18697246
wined3d: Pass a struct wined3d_shader_register to shader_glsl_get_register_name().
2009-05-08 12:13:40 +02:00
Henri Verbeet
448dc84b6e
wined3d: Fix shader_glsl_get_register_name() indentation.
2009-05-08 12:13:33 +02:00
Henri Verbeet
5e473cb17f
wined3d: Group register information into struct wined3d_shader_register.
2009-05-08 12:13:17 +02:00
Henri Verbeet
69861b8fed
wined3d: Increase the size of glsl_src_param_t.param_str.
...
It constains the register name plus potential modifiers, so it should be
larger than reg_name instead of smaller.
2009-05-07 14:44:22 +02:00
Henri Verbeet
690d666de5
wined3d: Add support for immediate constants to shader_dump_register().
2009-05-07 14:44:22 +02:00
Henri Verbeet
65622a052c
wined3d: Create a struct wined3d_shader_version to store version information.
...
The version tokens in SM1-3 and SM4 are similar, but not the same.
2009-05-07 14:44:21 +02:00
Henri Verbeet
5c63d93e18
wined3d: Store the shader version in the frontend's private data.
2009-05-07 14:44:21 +02:00
Henri Verbeet
94cf618658
wined3d: Improve shader_sm4_read_opcode() to handle some simple opcodes.
2009-05-07 14:44:21 +02:00
Stefan Dösinger
4c29105cb2
wined3d: Pack hardcoded local constants in ARB.
...
This makes the location of used program.local parameters more
predictable and eases sharing this space with other private constants.
2009-05-06 13:12:45 +02:00
Henri Verbeet
9381a41681
wined3d: Add an initial shader_sm4_read_src_param() implementation.
2009-05-06 12:21:05 +02:00
Henri Verbeet
7f9cde5a31
wined3d: Add an initial shader_sm4_read_dst_param() implementation.
2009-05-06 12:21:02 +02:00
Henri Verbeet
699eae0cf7
wined3d: Shift the writemask in the frontend.
2009-05-06 12:20:57 +02:00
Henri Verbeet
2576bf3ddd
wined3d: Fix some more indentation.
2009-05-06 12:20:50 +02:00
Henri Verbeet
46b4c15a31
wined3d: Remove some redundant code.
2009-05-06 12:20:39 +02:00
Stefan Dösinger
df5d82dd5b
wined3d: Pack ARB srgb constants better.
...
There's no need to waste constants for repeatedly loading the same value.
2009-05-05 14:13:20 +02:00
Stefan Dösinger
d2e12a19ca
wined3d: Make use of GL_ARB_half_float_vertex.
...
This extension is a subset of GL_NV_half_float that defines support
for the stream format(same constant), but doesn't define texture
formats or immediate mode entrypoints.
2009-05-05 14:13:02 +02:00
Stefan Dösinger
f5e24f7a85
wined3d: Implement texldd.
...
GL_ARB_shader_texture is supported on dx9 ATI cards(and probably dx10
ones too). For Nvidia cards I included a fallback to normal texld.
GL_EXT_gpu_shader4 supports similar texture*Grad GLSL functions, just
with an EXT prefix instead of ARB. For dx9 NV cards we'd have to use
GL_NV_fragment_program2, which supports a texldd equivalent on those
cards.
2009-05-05 14:12:52 +02:00
Henri Verbeet
454dd2ed07
wined3d: Implement shader_sm4_is_end().
2009-05-05 11:34:39 +02:00
Henri Verbeet
2a5a6a3439
wined3d: Store the SM 1-3 opcode information tables in the SM 1-3 frontend.
2009-05-05 11:34:28 +02:00
Henri Verbeet
15a2a5eea6
wined3d: Add a minimal implementation of shader_sm4_read_opcode().
2009-05-05 11:34:21 +02:00
Henri Verbeet
868f5bfc7c
wined3d: Handle reading the shader header in the frontend.
...
In SM 1-3 this is just the version, in SM4 this also includes the token count.
2009-05-05 11:34:15 +02:00
Henri Verbeet
ef074cdde1
wined3d: Introduce a stubbed SM4 shader frontend.
2009-05-05 11:34:07 +02:00
Henri Verbeet
dddd1f0211
wined3d: Select the frontend based on the version token.
2009-05-04 12:53:16 +02:00
Henri Verbeet
5f96c0083a
wined3d: Add a frontend function to determine if there are any tokens left.
2009-05-04 12:53:12 +02:00
Henri Verbeet
2378108eb9
wined3d: Create a frontend for parsing shaders.
2009-05-04 12:53:08 +02:00
Henri Verbeet
5a7afd9b2a
wined3d: Move SM 1-3 parsing functions to their own file.
2009-05-04 12:53:04 +02:00
Henri Verbeet
6eb43e35c9
wined3d: Get rid of the remaining WINED3DSP_REGNUM_MASK usage.
2009-05-04 12:52:59 +02:00
Henri Verbeet
5e072395b4
wined3d: Avoid using WINED3DSP_REGNUM_MASK in the def/defi/defb handlers.
2009-05-01 13:12:08 +02:00
Henri Verbeet
a605fcd2fd
wined3d: Introduce shader_sm1_read_comment() to read shader comments.
2009-05-01 13:12:04 +02:00
Henri Verbeet
7420a96736
wined3d: Merge wined3d_private_types.h into wined3d_private.h.
2009-05-01 13:11:57 +02:00
Henri Verbeet
59705b9c20
wined3d: Use the shader_sm1_read_*() functions in shader_trace_init().
2009-05-01 13:11:42 +02:00
Henri Verbeet
752d80400d
wined3d: Merge shader_dump_arr_entry() into shader_dump_register().
2009-05-01 13:11:37 +02:00