Pixomatic Development History
This change log includes the entire Pixomatic development history.
Changes for 3.0.519.5869, 2011/01/20
- Lots of compatibility and bug fixes. Runs many more apps directly. D3DX runs correctly now.
- Added new documentation file.
- Non-implemented functions now show error in debug, and return error code in release.
- Fix instance data streams to not step by StartVertex.
- Fix for streams unused by vertex shader in InstanceStart.
- Fixed problem setting virtualprotect for entire compiled code - omitted thunks at end due to sizing bug.
- Fixed ReadDefConstants ctx base address, D3DSIO_DEFI/D3DSIO_DEFB and ExpandDp2Add.
- Fixed some out of memory surface handling in wrapper (hit in COD4).
- Fixed nondeterminism in d9cap_shadowvolume (race in drawprim_clipped in static array setup).
- Fixed bug with texsample output going to oC0 (was fixed in radline).
- Added warning in StretchRect() call.
- Added warnings on points and line.
- Deal with vdecls that we can't handle, better warnings and robustness.
- Made D3DMULTISAMPLE_4_SAMPLES a valid multisample type.
- Fix lighting NULL dereference.
Changes for 3.0.2016, 2008/04/24
- Add QI support for IID_IDirect3DResource9.
Changes for 3.0.2015, 2008/01/11
- Don't fail on SetRenderTarget when iTarget > 0 and pRT is NULL in play app.
- Fix pixo9_sse CDevice::GetRenderTarget() bug when RenderTargetIndex > 0.
- Fix pixo9_sse bug when releasing current pindex buffer.
- Fix D3DPMISCCAPS_SEPARATEALPHABLEND bug.
Changes for 3.0.2014, 2007/12/14
- Omatic pixel counters.
- Dx9pixo support for occlusion queries.
- Pixel counters in dev state.
- Pixel counting in RCS; pixel counters in RS.
- Updated pixel counters when back end finishes.
- Changed query events to only issue on D3DISSUE_END.
Changes for 3.0.2013, 2007/12/06
- Fix texkill with msaa.
Changes for 3.0.2012, 2007/11/30
- Update zoom readme.txt.
- Do zoom when 0xffffffff is set for D3DRS_MULTISAMPLEANTIALIAS.
- Make zoomable mode on by default for pixo.
Changes for 3.0.2011, 2007/11/27
- Fix GetSlicPitch() bug with cubemaps.
- Check for rendertarget/Z buffers and flags before setting clear up.
- Fix dependency tracking for Clears.
- Grab swap chain backbuffer at top of Render function.
Changes for 3.0.2010, 2007/11/26
- Add support for D3DFVF_XYZW
Changes for 3.0.2009, 2007/11/21
- Fix couple of 64-bit dll loading bugs.
Changes for 3.0.2008, 2007/11/16
- Implement CSurface::GetContainer.
Changes for 3.0.2007, 2007/11/14
- Fix stencil clear crash when there is no stencil buffer.
- Add D3DFMT_D32_LOCKABLE and pixo specific d3dfmt_d24s8_lockable .
- Add TiledZBufferUnQuadSwizzle and code to unswizzle depth/stencil buffers.
- Fix clear to set RenderedTo bool for depth buffers.
Changes for 3.0.2006, 2007/11/14
- Implemented CDevice::GetRenderTargetData.
- Add support for r32f, g32r32f, and a32b32g32r32 rendertargets (unswizzling, etc.).
- Fix r32f texture bug returning 0 for other components.
Changes for 3.0.2005, 2007/11/13
- Fix bug when using _pp and _sat on same instruction (sat wasn't happening).
- Fix postpass processing for shaders that kill pixels or compute depth.
- Set floating point state in all threads so apps can't hose us.
- Fix frame timer initialization bug.
Changes for 3.0.2004, 2007/11/09
- Implement CDeviceCap::DrawIndexedPrimitiveUP.
- Move pointers out of DXCAP_STATE.
- Add DXCAP_STATE_MAX constants.
- Implement CResource::QueryInterface() for all textures.
- Fix InitDx9PixoStats module checking.
Changes for 3.0.2003, 2007/11/08
- Implement DrawPrimitiveUP.
- Fixup D3DFMT_A8B8G8R8 -> D3DFMT_A8R8G8B8 for CreateTexture.
- Fix D3DLOCK_DISCARD bugs.
- Create new windows for rendertargets.
- Clear surfacedata when created.
- Remove D3DFMT_A8B8G8R8/D3DFMT_X8B8G8R8 support from pixo by default.
Changes for 3.0.2002, 2007/10/31
- Implement occlusion query.
- Fix ref counting bugs with device and several objects.
- Fix various other bugs for Unreal.
Changes for 3.0.2001, 2007/09/25
- Now interpolates attributes relative to a vertex, rather than (0,0), resulting in better worst-case accuracy.
Changes for 3.0.2000, 2007/09/25
- Calculate z relative to a vertex, rather than relative to (0,0), which makes for much better worst-case accuracy.
Changes for 3.0.1999, 2007/09/13
- Got rid of bin triangle done command at end of trilists (just detect BC_* command, which is non-overlapping).
Changes for 3.0.1998, 2007/09/06
- Intrinsic optimizations for somewhat better codegen.
Changes for 3.0.1997, 2007/09/05
- Fix nasty little SeqID wrong when flushing bug.
Changes for 3.0.1996, 2007/09/05
- Implement MSAA Clear full tiles and rects.
- Implement UnQuadSwizzleTile_4XMSAA.
- Move zoom mode change detection to CBinSet class.
- Implement MSAA FillRect_Z, FillRect_S, FillRect_SZ, FillRect_P, Z_FillRect_PZ, FillRect_PS, FillRect_PSZ.
- Fix tile size calculation bug in CBinset::Create.
Changes for 3.0.1995, 2007/09/05
- Fixed off-by-0.25 error in vertex snapping.
- Added 8x8 bbox triangle special cases.
Changes for 3.0.1994, 2007/08/31
- 4X MSAA zoom mode working.
- No 4x4 or 16x16 special cases or SSE rasterization yet.
Changes for 3.0.1993, 2007/08/30
- Wait for threaded blit to complete before doing CDevice::Reset guts.
- Store texture surface objects in texture.
- Tons of ref counting madness.
- Fix FVFFromD3DVE to silently fail if it can't create FVF from vertexelem.
Changes for 3.0.1992, 2007/08/29
- Objects now addref the main device so turkeys that release objects after their last device release don't die.
- Implemented DXT textures and conversion.
- Fixed mipmap level calculations in texture create routine.
First Release of Pixomatic version 3, 2007/07/01
- Initial release of the new Pixo with full DX9 support, including pixel and vertex shaders.
- AMD Athlon 'movd r32,mmx' performance workaround added. See section 9.6 "Avoid Moving Data Directly Between General-Purpose and MMX Registers" from the "Software Optimization Guide for AMD Athlon 64 and AMD Opteron Processors" document for details.
- Added PixoSetColorMask()/PixoGetColorMask
- PixoSetZPass()/PixoSetStencilValZPass() now work in PIXO_RASTERIZATION_PIPELINE_STANDARD mode.
- Added PixoStencilEnable() / PixoStencilDisable() / PixoIsStencilEnabled()
- Added scissor functions: PixoScissorEnable(); PixoScissorDisable(); PixoIsScissorEnabled(); PixoSetScissor(int x, int y, int width, int height); PixoGetScissor(int *x, int *y, int *width, int *height);
- Added PixoBufferOpenWithZ
- Added PixoSetCPUFlags
- Added UserData parameter to PixoSetTriangleCallback function.
- Added PixoMatrixInverse4x4.
- Fixed multimon bug when using DirectDraw and PixoBufferBlitRect.
- Added PixoSetVertexTransformCallback / PixoGetVertexTransformCallback.
- Added full set of framebuffer src/dest blends and blend ops.
- Changed over to a general three-stage pipeline, with a full set of operand modifiers and state ops.
- Added buffer width and height parameters to PixoSetFrameBuffer, PixoGetFrameBuffer.
- Added PixoBlendEnable, PixoBlendDisable, PixoIsBlendEnabled
- Added PixoACompareEnable, PixoACompareDisable, PixoIsACompareEnabled
- Added PIXO_STREAM_POSSCREENXY, PIXO_STREAM_POSSCREENXYZ, PIXO_STREAM_POSSCREENXYZRHW
- Added PixoMatrixMultiply4x4(float *mat, float const *a, float const *b);
- Added PixoSetZClipRange / PixoGetZClipRange
- Added PIXO_STREAM_POS(_count), PIXO_STREAM_TEX(_texnum, _count) stream macros.
- Added PIXO_STREAM_DIFFUSE_ABGR and PIXO_STREAM_SPECULAR_ABGR stream definition constants. They swap the B and R components on load.
- Added support for clamping textures up to 4096x4096.
- Workaround compiler bug with shr_int64, shl_int64 because fastcall and inline asm don't play nicely together in optimized builds.
- Fixed bug with texture gradients for lines, which caused textures to display incorrectly on lines.
- Fixed bug with x-major lines with slope > 0, where sometimes bottom run of pixels didn't get drawn.
- Added the PIXO_VERTEXCALLBACK_CALCULATE_OBJECTSPACECOORDINATES flag for the PixoSetVertexCallback routine and the ObjectSpaceCoordinates member to PIXO_VERTEX. If this flag is set, your PIXO_VERTEXCALLBACK will point to the local object space coordinates. Useful if you plan on doing lighting calculations which require the object space position - such as point and spot lights.
- The ci member is now valid in PIXO_VERTEX during for PIXO_VERTEXCALLBACK.
- Added PixoGetConcatenatedTransformMatrixInverse() routine.
- Changed polarity of fog so that fog==0 means full fog, and fog==0xFF means no fog.
- Bug: Fix fast path detection for rasterop 10 and fragment format 8.0
- ACOMPARE (general alpha compare) capability added:
- PixoSetAlphaRefValue / PixoGetAlphaRefValue
- PixoSetWStateACompare / PixoGetWStateACompare
- Control over alpha channel modulation added:
- PixoSetWStateDiffuseAlphaop / PixoGetWStateDiffuseAlphaop
- PixoSetWStateTex1Alphaop / PixoGetWStateTex1Alphaop
- New 2D Blit routines:
- PixoStretchBlitARGB8888 / PixoBilinearStretchBlitARGB8888
- PixoSetStretchBlitARGB8888Code / PixoGetStretchBlitARGB8888Code
- PixoBilinear2xStretchVerticalARGB8888 and Pixo2xStretchVerticalARGB8888
- PIXO_BUF_2XZOOM_VERTICAL / PIXO_BUF_2XZOOM_NO_BILINEAR added to PIXO_BUFFEROPEN_FLAGS
- S3TC conversion routines:
- Fast SSE / MMX clear routines exposed: PixoMemSet16 / PixoMemSet32
- PixoDrawPointspriteList function added.
- New stream definition point size control parameter: PIXO_STREAM_POINTSIZE
- Bug: Remove MEM_DECOMMIT from VirtualFree() calls
- Bug: Renamed MENUINFO structure to PIXOMENUINFO so it doesn't collide with Windows.h.
- Bug: Remove Visual Studio Processor Pack dependencies from samples.
- Bug: Corrected documentation of memory layout of matrices.
- Sped up bilinear filtering 5-10%.
- Added PixoSetFastZSPretest / PixoGetFastZSPretest
- Added z and stencil pretesting for each triangle, whereby a z-and-stencil-test-only path is used until either a pixel passes both z and stencil test or the entire triangle is determined to be z-and-stencil-occluded. This avoids attribute gradient calculation and setup for fully-occluded triangles, as well as some attribute stepping for partially-occluded triangles, typically resulting in 5-10 percent speedup if there's significant overdraw (although this is highly dependent on drawing order).
- X, Y screen position types changed to PIXO_FIXED12_4 in PIXO_VERTEX and PIXO_VERT_CACHE structures
- PIXO_FEATURE_HTT (hyperthreading) flag added to PIXO_CPU_FEATURES_FLAGS
- PIXO_MAX_STREAMS bumped up to 8
- Removed ZCrossProduct parameter from PIXO_DRAWTRIANGLECALLBACK
- Three vertex distance fog types supported now:
- new type parameter added to PixoSetVertexDistanceFog / PixoGetVertexDistanceFog
- PIXO_VERTEX members modified to help with object space lighting calculations:
- PIXO_VERTEX->ci has PIXO_CLIP_INFO (homogeneous clip coordinates).
- PIXO_VERTEX->Index has vertex index (or -1 if clipped or PixoBeginPrimitive)
- Vertex normals are in. Use PixoSetNormals() to enable/disable.
- for PixoSetStreamDefinition: PIXO_STREAM_NORMAL
- for PixoBeginPrimitive: PixoNormal3f(v) / PixoGetNormal3f
- Added PixoSetMipMapLodBias / PixoGetMipMapLodBias
- Added PixoRASTEROP_USER_CODE and PixoSetUserRasteropCode()
- Added PixoSetModulationFactor / PixoGetModulationFactor
- Added VertexStart parameter to PixoTransformVertices()
- Bumped max number of streams to 8
- add PixoSetTexCoordIndex / PixoGetTexCoordIndex
- Added PIXO_WIREFRAME_ON_FILL for PixoSetWireFrame()
- Added PixoBuildStreamDefCodeBufferArray.
- Added PixoGetStreamDefCodeBuffer
- Rewrote and optimized vertex stream code welding.
- Added Pixo2xStretchARGB8888 which doesn't do the bilinear thing.
- Added PixoSetVertexCallback / PixoGetVertexCallback for user vertex shader, texgen, lighting, etc.
- Added real colored, textured/alpha'd, rasteroped lines and PIXO_LINELIST, PIXO_LINESTRIP support.
- Added PixoSetTexGen / PixoGetTexGen. Currently supports PIXO_TEXGEN_UNPROJECTED_XYZW and PIXO_TEXGEN_PROJECTED_XYZ1)
- PixoVertexCachedElement allows PixoBeginPrimitive to draw with pre-transformed PIXO_VERT_CACHE elements (usually via PixoTransformVertices)
- Added PixoBeginPrimitive vertex routines to help with drawing 2d elements.
- PixoVertexScreen2f(v) / PixoVertexScreen3f(v)
- Build welder_state_flags.txt to help with welder state flag debugging
- Components.asm was missing from the source directory
- pixomatic_debug.dll, .lib, and .pdb added to distribution.
- Added PixoSetPolygonZBias / PixoGetPolygonZBias
- PIXO_STREAM_POSXYZRHW has been deprecated, removed, stabbed with a wooden stake, and burned. The ashes were then carefully put into industrial strength ziploc baggies (double bagged) and carrier pigeoned to four remote super ultra high security secret locations where they were vociferously badmouthed and finally buried.
- Added projected textures. New functions / defines:
- PixoSetWStateTextureProjected / PixoGetWStateTextureProjected
- PixoTexCoord3f(v) / PixoGetVertexTexCoord3f
- PixoTexCoord4f(v) / PixoGetVertexTexCoord4f
- PIXO_STREAM_TEXSTR0 / PIXO_STREAM_TEXSTR1
- PIXO_STREAM_TEXSTRQ0 / PIXO_STREAM_TEXSTRQ1
- Added v versions for TexCoord#f.
- PixoTexCoord2fv / PixoTexCoord3fv
- Pixomatic is alive!
- Added a*s+1*d rop.
- Added 2x fixed modulation. Fixed bug where alpha wasn't being properly preserved in eax when Z24S was active with alphatest and z write. Turned off all fragment-generating states when fragment could never be needed, instead of just the ones that currently are in the master component table.
- Added PixoZEnable(), PixoZDisable(), and PixoIsZEnabled()
- Added 2x fixed modulation.^M Fixed bug where alpha wasn't being properly preserved in eax when Z24S was active with alphatest and z write. Turned off all fragment-generating states when fragment could never be needed, instead of just the ones that currently are in the master component table.
- texture, world, view are in. fixed 0:1, -1:+1 z range issues
- Fixed incorrect mask when enabling specular for Dot3-specular mode.
- Do automatic specular enable for Dot3-specular properly this time.
- Added dot3 specular.
- Added assert checks for no input format.
- Cleaned up some naming.
- PixoDrawText3f is fully functional, wireframe color
- zwrite for lines
- 64-bit stateword
- Fixed bug with initial state of R field in specular.
- Handle wrap mode textures up to 4096x4096.
- Fixed inaccuracy in Mul8x8SignedWithFixup().
- Added comments about precision and range.
- Allow scaling up to 8-(1/4096) of Dot3LightVector.
- Use texture 1 alpha in dot3.
- Added component input/output comments. Removed redundant EBP reload. Added bilinear condition to EBP reload in tex0 palettized wrap case. Streamlined tex1 bilinear welding a little.
- Added assert to check for tex1 when dot3 active.
- Changed from dot3 texture type to dot3 state.
- Palettized textures. [10-14-2002]
- ... much stuff deleted for brevity, sanity, readability ...
- Initial rasterizer. [04-08-2002]