This prevents for example a d3d9 depth stencil from being destroyed when it
has no external references but is still in use by the device/stateblock. A
nice side effect is that it simplifies handling of "implicit" surfaces like
the frontbuffer and backbuffers, as well as the forwarding of reference counts
for surfaces that are part of a texture.
We will need this for d3d10, where both dxgi and d3d10core are making wined3d
calls. Right now d3d8/d3d9 also use this to protect their own data, but
eventually we should push this down into wined3d itself and use something a
bit more fine-grained. There's no good reason that doing e.g. a vertex buffer
upload in some thread should block all of wined3d.
DX10 cards support 512(ATI) or 1024(Nvidia) vertex shader constants in
GL. The dx9 DXCapsViewer shows that dx10 windows drivers only claim
256 constants on Windows, so we can and should do the same.
Other than being a bit nicer than passing function pointers all over the
place, this helps dxgi/d3d10. While the swapchain itself is created in dxgi,
its surfaces are constructed in d3d10core, which makes it impractical for dxgi
to pass the appropriate function pointers.
Let the few existing parts which need the capabiliteis use the WineD3D
capability structure (gl_info). This info structure contains next to
'flags' inidicating certain features also all GL/GLX functions
pointers. Because D3D8 moves over to the wined3d gl_info structure all
the gl prototypes in d3dcore_gl.h were unneeded and removed.
- use D3DCOLOR macros instead of using shift + masks
- fix a bug where diffuse.lpData checked instead of specular.lpData
- implement color fixup on ARB VShader compilation code:
-> on input parameters using swizzle
-> add is_color parameter on vshader_program_add_param
- Move some of the screen mode related functions into wined3d and add
untested support for the new d3d9 options of providing the format to
some of the calls.
- Move other functions from the directx interface into the common
library and implement the calls from d3d9 as well.
- Copy across the first of the functions used to make traces more readable,
creating utils.c to store them in. Eventually the ones in d3d8 will be
removed but for now just duplicate the code.
- add a new DEBUG_SINGLE_MODE #define (for debug caps needs)
- better traces for surface dumping
- much better Texture support on Utilities functions and on
CheckDeviceType
- D3DRS_ZVISIBLE as unsupported (as seen in msdn)
(glCompressedTexImage2DARB problem).
- Fix typo on constant.
- Detection of NVidia texture_shader and register_combiners
extensions.
- Begin to implement BUMPMAPPING using NVidia Texture shader extension
(not really working for now).
detection (and not build time GL headers)
- add a new debug channel for hardware vertex shaders
- hardware VS "compiler" fixes:
-> special case for address registers (MOV must be replaced by ARL)
-> add line numbers to trace (better to find why NVidia drivers complains)
-> one parse to determine temporary and address registers needs
(@todo: check GL limits)
-> remove duplicate traces from Generic ParseProgram
If glColorMaterial is set to track current color and none is supplied,
it gets disabled.
glMaterial is reset when I think it is necessary.
Slow mode now has defaults for when fvf parms are not supplied (as per
fast mode).
Slow mode now sets up the specular color (forgot that bit previously,
I think!).
Trace now lists the front, back and stencil buffers for ease of
debugging.
their impact of performance changes.
SetTransform almost rewritten in a much neater way, and in
coordination with drawprim it significantly reduces the number of
times that we reload the matrixes.
Handle alphaop disabled but color op not-disable in a more appropriate
way (Docs say this is an illegal state and then proceed to use it).
Trace out textures as they are created.
Update the comments around the debug code and complete the debugging
set so textures which are used in the game can also be viewed.
get quad damage.
checkGLcall must not supply a \n as that is supplied by its
expansion.
Performance fixes to save applying the same states 6 times and to
reduce function calls when accessing front/back buffers.
Make traces more readable by more constants -> english descriptions.
surface.c/*texture.c (with add of lockable, locked and Dirty flags)
- add of dirtyRect/dirtyBox for better dirtification management (not
used yet, but huge optimisation can be possible now)
- fix some debug traces (well it's better to use debug_d3dpool)
- fix some stupid regression on point parameters (forgot to check
extension on fillcaps)
- split of CreateDevice gl/gxl detection code into FillGLCaps
- implementation of resolution change (using ChangeDisplaySettings)
but desactived as ChangeDisplaySettings don't seem to work well
- begin of swap chain support (now need to split/clean
gxlpbuffer/glxpixmap code for swap chain use)
- pixel shader code split into a new "COM object" (as done before for
vertex shader)
- some fixes on Validate* functions call types
- add pixel shader (ie fragment_program) detection on caps code
- more cubetextures fixes (now d3d8 sdk cubemap sample work almost
perfectly)
- add a new debug function "debug_d3dpool" and use it
- add a new param (the device) for the conversions functions (because
we need to check caps to see how to convert)
- some crashes fixed in render to surface code with no stencil-depth
surface
- a very simple cliplane fix
- a stupid palettes fix (stupid language)
- begin of anisotropic filter support
- begin of compressed textures support
- a very useful debug functions: IDirect3DSurface8Impl_SaveSnapshot to
dump surfaces as png ;)
- many useful surfaces debug code (using SaveSnapshot)
using glx pbuffers (with a useful debug code to display rendered
surface into window drawable)
- better cubetextures
- split utilities functions into utils.c and added more
- more readable debug again
- a better caps code (not perfect but i'll use glx code later)
- use of the new caps code
- begin of UpdateTexture
- begin of Cursor support
- cleaning most of deprecated #if 0/#endif
- correct some lockable/unlockable behavior
- correct some returns code
- fix a crash in pixel shader parser (happened with unreal2)
- currently desactive pixel shaders caps (with #define) while hw
shaders code isn't merged
- when we have a special debug channel for shader, use it ;)
- fix again some stubs return value
- more more readable traces now (principaly IDirect3D8 capacities
check and surface locking code) using new debug functions
- fix/cleaning the surface locking code
- now we support D3DTOP_SUBSTRACT so declare it in caps
- now support true 32bit (well X 24 bit can be used as 32 bit in caps
code)
- first try to get D3DTSS_TCI_CAMERASPACENORMAL and
D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR look good
- native support 32 bit support (now application can choose 16 or 32
bit support) if current resolution is 24 bit (as we can only launch
games in windowed mode)
- textures palettes support
- fix reflexion placement code (the sdk sample begin to work)
- fix a stupid crash when using traces in vshaderdeclaration
- more more readable traces (init/caps)
- more cubetextures fixes
- some useful debug functions for textures format
- correct DrawPrimitive (RHW correctness and vshader RHW)
- more copyrects fixes (only two unimplemented behavior remain)
- fix GetFrontBuffer to get screenshots samples working
- add D3DCOLORTOGLFLOAT4 and use it
- first try of D3DRS_FOGTABLEMODE support
- minor indentation and traces fixes
- fix locking/unlocking/dirty behavior (dirtify on lock) +
optimisations (only copy when dirty)
- fix IDirect3DDevice8::Clear behavior (problem seen after a
locking/unlocking code error)
- begin to fix volume and cube textures management
- minor indentation changes
- fix SELECTARG2 behavior (with help from Lionel Ulmer)
- surface locking/unlocking (only rendering and textures surfaces
supported now)
- beginning of Target/Front surface support
- try to get D3DTOP_SELECTARG_* working
- implemented D3DTOP_SUBTRACT: currently only if OpenGL1.3 is used, we
have to use GL_SUBTRACT_ARB for other versions
the others as well), and call when needed as well.
- Change D3DFMT_R5G6B5 handling to make backdrop of Max Payne appear.
- Add code to reject attempts to use invalid texture units (Max Payne
did this a lot).
- ValidateDevice fixme silenced as harmless but occurs frequently.
- Add trace which can be compiled in to debug vertex shaders, and
correct fixmes and dprintf's into appropriate trace statements.
- Ensure we trace what we return when querying the device caps.
- Correct bug with negative numbers in vertex shader code.
DrawPrimitive call.
- Beginning of VertexShader constants support into stateblock (only
stored, not captured yet).
- Fix compiation with nivdia GL/gl.h and mesa Gl/glext headers as
reported by Andrew John Hughes.
- One glActiveTexture/glActiveTextureARB missing.
- stateblocks to IDirect3DStateBlockImpl interface and moving into
a new file (stateblock.c)
- shaders to IDirect3D*ShaderImpl interfaces
- splitting vshader and vshader declaration as in dx9 into 2
interfaces (for future common layer use)
- vshader declaration code to a new file (vsaderdeclaration.c)
- device calls to new interfaces (redirect stubs)
Simple texture fix for a little regression after last Jason's patches.
Some caps code using the GL/glext.h defines (GL_VERSION_*).
- AddRef/Release where needed
- use IUnknown* instead void*
- fix many GetDevice using AddRef
- fix IDirect3DSurface8Impl_GetContainer using QueryInterface
- better traces
- specific input data filling function for vertex shaders using vertex
shader declaration (and not FVF ... maybe FVF will return for fast
path with simples vertex shader declarations)
- huge vertex shader fixes:
- add and fix many vs (1.0->2.0) used opcodes in complex shaders
- improvements to programs parser: parse comments, version, ..
- add a vertex shader input filler function (parsing vertex shader
declaration): almost complete
- comments most of the traces (else flood ...)
- add more urls in comments
- indent, cleanups
- remove non-esthetic c++ comments into c comments block ;)
- more more debug
- indent, cleanups
- trying to use DIFFUSE and SPECULAR for vertex shader
- many fixes
- integration with Jason's texture patch
- beginning of shaders support (Vertex and Pixel Shaders 1.1 on
DirectX8)
- beginning of D3DX8 support the D3D8 utility API (very basic, only
the core header)
buffer).
- Texture mapping corrected if no real texture bound.
- Code now detects which opengl extensions are present - to be
extended later.
- More debug tracepoints.
- Add dummy textures so texture operations which dont reference the
texture can work.
- Support 2d and 3d textures properly.
- Reapply the texture state information as textures get set, as opengl
stores the state along with the bound texture whereas directx uses the
current state information during the draw stage.
- 3rd attempt to sort out lighting, for programs which dont set normals.
- Temporarily silence some unnecessary fixmes.