Commit Graph

3553 Commits

Author SHA1 Message Date
Gerald Pfeifer 569b448e13 wined3d: Fix logical condition in find_clip_texcoord(). 2009-06-22 13:25:27 +02:00
Henri Verbeet e5e4d1e9a7 wined3d: Add an rtInternal fallback for WINED3DFMT_R16G16_UNORM. 2009-06-22 12:59:21 +02:00
Henri Verbeet 404f4f7321 wined3d: Get rid of some asserts. 2009-06-22 12:59:16 +02:00
Henri Verbeet 7598ab2c84 wined3d: Get rid of DEBUG_SINGLE_MODE. 2009-06-22 12:59:04 +02:00
Henri Verbeet 9a58f37cd3 wined3d: Move the num_untracked_materials lookup out of the main drawing loop. 2009-06-22 12:58:59 +02:00
Henri Verbeet 37491bb5d1 wined3d: Simplify the transformed position fixup a bit. 2009-06-22 12:58:54 +02:00
Stefan Dösinger 95788401af wined3d: GLSL 1.20 includes gl_FragData[] syntax.
This means we don't have to enable ARB_draw_buffers explicitly.
2009-06-22 11:27:20 +02:00
Stefan Dösinger 3845b37a21 wined3d: Advertise SM 3.0 in ARB if the extensions are available. 2009-06-22 11:27:11 +02:00
Stefan Dösinger e211a0b4a4 wined3d: Enable Shader Model 2.0 in ARB.
If the needed constants are available, we can support all vs_2_0 and ps_2_0
requirements with the plain ARB extensions. We cannot however, run SM 2.0a or
SM 2.0b.
2009-06-22 11:27:05 +02:00
Stefan Dösinger e1c6b73e2d wined3d: Make the ARB index offset work with emulated MOVA. 2009-06-22 11:26:57 +02:00
Stefan Dösinger 77820d5ea5 wined3d: XXXC CC doesn't work even with NV_FP2 on. 2009-06-22 11:26:50 +02:00
Stefan Dösinger 26d17fe04c wined3d: Implement MRTs in ARB. 2009-06-22 11:26:43 +02:00
Stefan Dösinger bb8bcf5878 wined3d: Reload the first 8 constants on a 1.x and != 1.x ps switch.
ps 1.x constants are clamped to [-1;1], constants in >= 2.0 pshaders
are not. This means we have to reload constants when switching between
those shader types in ARB. In GLSL this is not a concern because
constants are tied to program objects and are reloaded on a shader
change anyway.
2009-06-22 11:26:33 +02:00
Stefan Dösinger 2364ce08e5 d3d9: Add a SGN test. 2009-06-22 11:26:14 +02:00
Stefan Dösinger 20401fa9af wined3d: Invalidate the srgb tex in surface::unload. 2009-06-22 11:25:57 +02:00
Robert Key 89b08bc6e2 wined3d: Add missing HD 3400 renderer string. 2009-06-19 14:54:58 +02:00
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