Commit Graph

512 Commits

Author SHA1 Message Date
Henri Verbeet 22939f9d29 wined3d: Recognize the SM4 emit opcode. 2010-01-07 09:26:20 +01:00
Henri Verbeet c57c76b78e wined3d: Recognize the SM4 ige opcode. 2010-01-07 09:26:08 +01:00
Henri Verbeet b548e387ae wined3d: Move shader input/output signatures to IWineD3DBaseShaderClass. 2009-12-31 12:12:16 +01:00
Henri Verbeet b3defd4c80 wined3d: Rename "wineD3DDevice" to "device". 2009-12-10 11:54:47 +01:00
Henri Verbeet d2ad2df637 wined3d: Remove a few redundant assignments. 2009-12-09 13:50:48 +01:00
Francois Gouget 060934c557 wined3d: Don't define nameless structs or unions.
Fixes compilation on systems that don't support nameless unions or structs.
2009-12-07 14:18:25 +01:00
Stefan Dösinger 0e77a381ea wined3d: Create clip coords only if they are used.
If GL vertex shader clipping is supported (GLSL or NVvp), we currently
always calculate clipping results in the shader. They're gracefully
discarded by opengl, but we need 6 constants / uniforms to calculate
unused values.
2009-11-12 15:18:00 +01:00
Henri Verbeet 111307dfba wined3d: Get rid of the GL_SUPPORT macro. 2009-10-29 13:09:33 +01:00
Henri Verbeet 48e03bc189 wined3d: Introduce a separate structure for various OpenGL implementation limits. 2009-10-29 13:09:27 +01:00
Henri Verbeet eeb54b9922 wined3d: Keep better track of where we're using wined3d contexts.
The idea here is that we can restore the thread's current GL context on
context_release() if it doesn't correspond to the current wined3d context on
context_acquire().
2009-10-28 11:15:19 +01:00
Stefan Dösinger 0c72464abf wined3d: Use the native constant limit for fitting private constants. 2009-10-26 11:42:36 +01:00
Stefan Dösinger 9ee6508132 wined3d: Remove dead code. 2009-10-26 11:42:29 +01:00
Stefan Dösinger f15fc8f41c wined3d: Take native constants into account when reporting ARB limits. 2009-10-26 11:42:20 +01:00
Henri Verbeet 8d2512317f wined3d: Free the blitter private data in arbfp_blit_free() (Valgrind). 2009-10-22 10:46:15 +02:00
Henri Verbeet 6be41fd59a wined3d: Get rid of GL_LIMITS. 2009-10-22 10:46:05 +02:00
Henri Verbeet 55047f811a wined3d: Fix some GLINFO_LOCATION abuse. 2009-10-22 10:45:57 +02:00
Stefan Dösinger 122ed40c2b wined3d: Use ARB constant limits in ARB. 2009-10-20 14:46:16 +02:00
Stefan Dösinger 2d802af4d9 wined3d: Make shader specific constants accessible via GL_LIMITS. 2009-10-20 14:46:08 +02:00
Stefan Dösinger 8a68f418db wined3d: Don't reserve clipping constants needlessly. 2009-10-08 12:03:50 +02:00
Stefan Dösinger ed2860f789 wined3d: Split the clip_parameters[2] array. 2009-10-08 12:03:42 +02:00
Stefan Dösinger 7f6ae94c0a wined3d: Don't write to result.color in arb_add_sRGB_correction.
add_sRGB_correction and the generate_pshader function generate the same MOV.
There's no need to do it in two places.
2009-10-08 12:03:30 +02:00
Stefan Dösinger dc45657f2c wined3d: Fix vs_2_0 sgn.
vs_2_0's sgn has two extra parameters - temporary registers for the
instruction. This patch fixes the crash of the d3d9:visual test on windows and
properly handles the vs_2_0 version of sgn.
2009-10-02 12:36:59 +02:00
Stefan Dösinger 404aecb8da wined3d: Test if result.clip[] works correctly.
The Mac Nvidia driver doesn't implement the result.clip part of
GL_NV_vertex_program2_option correctly. It complains about a syntax
error if "result.clip[0]" is used. "result.clip" compiles correctly, but
supports only one clipplane, and running the shader results in severe
rendering bugs.
2009-09-28 17:33:07 +02:00
Henri Verbeet f88c6e5ce5 wined3d: Move common shader fields to IWineD3DBaseShaderClass. 2009-09-25 15:14:35 +02:00
Henri Verbeet 9880cd7504 wined3d: Make some variables static. 2009-09-15 14:32:36 -05:00
Henri Verbeet f8a3a5fd49 wined3d: Check the correct debug channel in shader_arb_load_constantsF(). 2009-09-08 13:06:07 +02:00
Henri Verbeet f928d6ec87 wined3d: Fix shader_arb_load_constantsF(). 2009-09-08 13:06:01 +02:00
Stefan Dösinger d6547c535b wined3d: Only generate the clipplane emulation KIL if a clipplane is used.
The KIL is quite expensive because it forces drivers to disable early Z
discard. It is cheaper to generate and switch between two shaders.
2009-09-08 13:03:03 +02:00
Henri Verbeet 4cdb1c9211 wined3d: Print a warning when an ARB program exceeds the native resource limits. 2009-09-02 11:25:58 +02:00
Henri Verbeet 055906e2a9 wined3d: Properly check for ARB program compile errors. 2009-09-02 11:25:58 +02:00
Henri Verbeet 560d63548d wined3d: Remove trailing spaces. 2009-08-27 11:45:37 +02:00
Stefan Dösinger 3cd91a451d wined3d: Use 50 chars for register names in texm3x3* functions. 2009-08-19 17:28:08 +02:00
Henri Verbeet d900491310 wined3d: Replace find_clip_texcoord() with a generic function for finding a free input register. 2009-08-17 13:57:50 +02:00
Henri Verbeet f7918b978f wined3d: Make the "luminanceparams" shader_reg_maps member a bitmap. 2009-08-12 13:22:50 +02:00
Henri Verbeet 95bb4c0486 wined3d: Make the "bumpmat" shader_reg_maps member a bitmap. 2009-08-12 13:22:44 +02:00
Henri Verbeet 270f57e755 wined3d: Make the "address" shader_reg_maps member a bitmap. 2009-08-12 13:22:30 +02:00
Henri Verbeet 6fa9fa15da wined3d: Make the "temporary" shader_reg_maps member a bitmap. 2009-08-11 12:36:20 +02:00
Henri Verbeet 50853e295b wined3d: Make the "texcoord" shader_reg_maps member a bitmap. 2009-08-11 12:36:16 +02:00
Francois Gouget e74efb5487 Assorted spelling fixes. 2009-08-11 12:35:38 +02:00
Henri Verbeet 8d746c31ba wined3d: Properly handle negative loop step in shader_glsl_loop(). 2009-08-10 13:52:37 +02:00
Stefan Dösinger 14eedc5be7 wined3d: Watch out about higher constants when clamping ps 1.x consts.
ps 1.x supports only 8 constants, so the shader load code dirtifies the
first 8 on a shader switch. However, the constant load code reloaded all dirty
consts with clamping. That potentially left constants > 8 clamped.
2009-08-07 14:56:33 +02:00
Henri Verbeet 3bf0ad4528 wined3d: Explicitly pass the context to the shader_select() handler. 2009-08-07 12:11:06 +02:00
Henri Verbeet 4c1b3de936 wined3d: Call the shader_load_np2fixup_constants() handler directly from inside the shader backend. 2009-08-06 17:26:30 +02:00
Henri Verbeet 03686cb6bd wined3d: Explicitly pass the context to the shader_load_constants() handlers. 2009-08-06 17:26:30 +02:00
Henri Verbeet a7251f0f4e wined3d: Track render_offscreen in the context.
This makes sure the relevant states in FindContext() are actually marked dirty
when needed.
2009-08-06 17:26:30 +02:00
Stefan Dösinger 2e9362d0fb wined3d: ARB clipplane init needs the helper constant. 2009-08-05 11:19:14 +02:00
Henri Verbeet da1e5573da wined3d: Rename WineD3DContext to struct wined3d_context. 2009-08-03 15:01:48 +02:00
Henri Verbeet be536ebe2f wined3d: Get rid of activeContext. 2009-07-24 13:10:57 +02:00
Henri Verbeet ee4d18cc83 wined3d: Pass NULL to ActivateContext() when we don't need a specific target.
Once we keep track of the wined3d context for each thread,
lastActiveRenderTarget won't do what we want here.
2009-07-21 14:22:44 +02:00
Stefan Dösinger cd7f43b00d wined3d: Don't activate a context unless we need one. 2009-07-20 12:23:07 +02:00
Henri Verbeet 43e6686a78 wined3d: Rename _WineD3D_GL_Info to struct wined3d_gl_info. 2009-07-17 11:22:07 +02:00
Stefan Dösinger 9d14dcab68 wined3d: Use the unmodified source in MOVA.
The code removed by this patch was a leftover from the time when we tried to
emulate MOVA with a plain ARL, which only supports one source in plain ARB.
This breaks the more sophisticated MOVA and 4 component ADDR register we have
now however.
2009-07-16 11:15:45 +02:00
Stefan Dösinger 387d337a70 wined3d: EXP and EXPP are scalar operations. 2009-07-15 13:17:02 +02:00
Stefan Dösinger 2bfdff198c wined3d: Check the correct constant limit. 2009-07-10 13:07:33 +02:00
Henri Verbeet 483d552e21 wined3d: Allow shader_buffer_init() to fail. 2009-07-09 11:38:02 +02:00
Henri Verbeet 40b411958b wined3d: Rename "SHADER_BUFFER" to something sane. 2009-07-09 11:37:58 +02:00
Henri Verbeet 32fd8f2130 wined3d: checkGLcall() doesn't need a \n. 2009-07-07 11:50:22 +02:00
Henri Verbeet 2ac34bf231 wined3d: Add some missing float suffixes.
The compiler should be smart enough to fix most of these, but it looks sloppy.
2009-07-07 11:50:05 +02:00
Tobias Jakobi 0caebe5f51 wined3d: Force NP2 constant reload in shader_arb_select. 2009-07-02 11:56:57 +02:00
Tobias Jakobi ef280280c2 wined3d: Implement shader_arb_load_np2fixup_constants. 2009-07-02 11:56:51 +02:00
Tobias Jakobi e29babbf6d wined3d: Add NP2 fixup code to shader_hw_sample (ARB). 2009-07-02 11:56:45 +02:00
Tobias Jakobi 034fa4268c wined3d: Add NP2 fixup code to shader_arb_generate_pshader. 2009-07-02 11:56:39 +02:00
Tobias Jakobi ec30e9a85e wined3d: Add arb_ps_np2fixup_info structure and improve structure packing for arb_ps_compiled_shader. 2009-07-02 11:56:33 +02:00
Stefan Dösinger c82da7d975 wined3d: Don't dirtify too many shader constants.
If we have start = 4, count = 3, the highest dirty constant is the one with index 6. start + count gives 7,
so it already includes the zero-based array correction. Don't add an additional 1.

Additionally to the inefficiency of looking at one extra constant, this causes problems if the driver
rejects loading 257 constants on the initial load. In this case no constant is loaded if
GL_EXT_gpu_program_parameters is used.
2009-07-01 13:14:34 +02:00
Henri Verbeet 40bc47901c wined3d: Use flags for driver quirks. 2009-07-01 11:41:44 +02:00
Stefan Dösinger d4312ebb16 wined3d: Add the vertex shader footer in the main function. 2009-06-29 12:28:40 +02:00
Stefan Dösinger 5befed21f6 wined3d: Write the vshader footer in a separate function. 2009-06-29 12:28:31 +02:00
Stefan Dösinger 5859d87754 wined3d: Implement function calls with NV exts. 2009-06-29 12:28:21 +02:00
Stefan Dösinger 031401a070 wined3d: ARB*p is already on after a depth blit. 2009-06-29 12:28:13 +02:00
Stefan Dösinger 9d63585352 wined3d: Don't disable ARBfp if the replacement pipeline is used.
If the replacement pipeline is used, ARBfp is always on. Disabling it
can break shaders or the replacement pipeline, because the shader and
ffp code assumes the extension is on.
2009-06-29 12:28:06 +02:00
Henri Verbeet 7363b6e2e3 wined3d: Document GL context dependencies. 2009-06-26 12:05:07 +02:00
Stefan Dösinger d1cd08b7b3 wined3d: Honor WINED3DSPSM_NOT in ARB. 2009-06-26 12:02:29 +02:00
Stefan Dösinger 8fb1e2acfb wined3d: Jump to the else branch if cond is false, not endif. 2009-06-26 12:02:18 +02:00
Stefan Dösinger a07b50c94c wined3d: Support writemasks on texkill in ARB. 2009-06-26 12:02:12 +02:00
Stefan Dösinger 3a327908de wined3d: Initialize the used clip planes even if no clip emulation is used. 2009-06-26 12:02:07 +02:00
Stefan Dösinger 4d86eac60a wined3d: Unclamp vertex colors for 3.0 shaders in ARB if needed. 2009-06-26 12:02:01 +02:00
Stefan Dösinger f69fb5c011 wined3d: POW and LOG operate on the absolute value. 2009-06-26 12:01:54 +02:00
Stefan Dösinger bd14b6e2b4 wined3d: IFC requires GL_NV_fragment_program2. 2009-06-26 12:01:44 +02:00
Stefan Dösinger d4854b636c wined3d: Beware of double negations. 2009-06-26 12:01:36 +02:00
Henri Verbeet f98c6e3cff wined3d: Allow the existence of other shader types in get_loop_control_const(). 2009-06-24 11:28:50 +02:00
Henri Verbeet 943ed4e1e9 wined3d: Eliminate a redundant local variable in get_loop_control_const(). 2009-06-24 11:28:45 +02:00
Henri Verbeet aec6d319fa wined3d: Avoid a redundant copy. 2009-06-24 11:28:38 +02:00
Henri Verbeet fd8ebebe56 wined3d: Use a proper structure for "loop_control". 2009-06-24 11:28:33 +02:00
Henri Verbeet 4caf43ddb7 wined3d: Add some missing GL locking documentation to arb_program_shader.c. 2009-06-24 11:28:27 +02:00
Austin English a4f2d3d18e wined3d: Fix a compiler warning. 2009-06-24 11:25:09 +02:00
Stefan Dösinger e0ec956b3d wined3d: Fix pixelshader ifc.
The NVfp2 control flow uses the D3D syntax, and doesn't need the inversed
branch condition we're using in the vertex shader.
2009-06-23 15:53:00 +02:00
Stefan Dösinger 444b7ac7e5 wined3d: Use a local parameter for the position fixup.
I don't like that I have to do this because the posFixup is in all
vertex programs, so its at the same position and could be loaded
globally.  Unfortunately, there are only 256 env parameters usually,
which makes it impossible for any shader to use c256, even if it does
not use indirect addressing, and so we can't claim 256 constant
support.
2009-06-23 15:53:00 +02:00
Stefan Dösinger 7ffd10da28 wined3d: Find the clip texcoord before compiling.
The best is to put this together with the rest of the shader_arb_priv initialization.
2009-06-23 15:53:00 +02:00
Stefan Dösinger e64d48371f wined3d: Add a function to control use of NV_vp2 clipplanes.
I find it helpful for debugging to have this controlled at a central place,
without having to disable the entire GL extension or manually find all the
places where GL_SUPPORT(NV_VERTEX_PROGRAM2_OPTION) controls clipplane use. It
is useful for debugging the emulation code on NV cards and for debugging mac
driver issues.
2009-06-23 15:53:00 +02:00
Stefan Dösinger 85af0b2943 wined3d: Don't emulate clipplanes with ffp vp and fix a wrong if condition.
b2f09fd204 accidentally got the
device->vs_clipping check wrong. The FFP replacement should emulate
clipping if GL can't do this natively with vertex shaders, not the
other way. Also don't emulate clipping if we're using fixed function
vertex processing because (a) clipping is always supported by GL in
this case, and (b), fragment.texcoord[7] is undefined. (Or in the
worst case set to something bad by the app).
2009-06-23 15:53:00 +02:00
Henri Verbeet 114b5bdefb wined3d: Fix a comment.
This was actually broken by 122af07a30.
2009-06-23 11:48:10 +02:00
Gerald Pfeifer 569b448e13 wined3d: Fix logical condition in find_clip_texcoord(). 2009-06-22 13:25:27 +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 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