aboutsummaryrefslogtreecommitdiffstats
path: root/src/native/d3d/D3dDeviceInfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/native/d3d/D3dDeviceInfo.cpp')
-rw-r--r--src/native/d3d/D3dDeviceInfo.cpp320
1 files changed, 0 insertions, 320 deletions
diff --git a/src/native/d3d/D3dDeviceInfo.cpp b/src/native/d3d/D3dDeviceInfo.cpp
deleted file mode 100644
index 60af3a9..0000000
--- a/src/native/d3d/D3dDeviceInfo.cpp
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * $RCSfile$
- *
- * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Sun designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Sun in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
- *
- * $Revision$
- * $Date$
- * $State$
- */
-
-#include "Stdafx.h"
-
-// return true if device is capable of hardware accelerated
-
-D3dDeviceInfo::D3dDeviceInfo()
-{
-}
-
-D3dDeviceInfo::~D3dDeviceInfo()
-{
-}
-
-VOID D3dDeviceInfo::setCaps(D3DCAPS9 *d3dCaps) {
-
- BOOL supportNPOT;
- if (deviceType == D3DDEVTYPE_HAL ){
- isHardware = true;
- isHardwareTnL = (d3dCaps->DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT);
- }
- else // D3DDEVTYPE_REF
- {
- isHardware = false;
- isHardwareTnL = false;
- }
-
-
- // D3DTEXTURECAPS_NONPOW2CONDITIONAL caps-bit indicates "conditional"
- // Non Power of Two (NPOT)
- // textures that only support CLAMP addressing and don't
- // support mipmaps or compressed textures.
- // But some new vcards supports NP2 unconditional (GF6 and above).
- // Correct test for any kind of NP2 support:
- // If both unconditional and conditional support is
- // unavailable then NP2 is not possible anyway.
- // -------------------------------------------
- // POW2 | NP2_CONDITIONAL | result
- // -------------------------------------------
- // true | true | CONDITIONAL NPOT(*)
- // true | false | POW2 Only
- // false| any | UNConditional NPOT (**) //
- // ---------------------------------------------
- // (**)OpenGL like, Java3D preferred.
- // (*) below test:
- /*
- * if (((d3dCaps->TextureCaps & D3DPTEXTURECAPS_POW2) != 0) && // POW2 is true
- * ((d3dCaps->TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL) == 0)){ //NPOT_Cond is false
- * //Pow2 Only
- * supportNPOT = false;
- * }
- * else{
- * // both conditional and unconditional
- * supportNPOT = true;
- * }
- */
- if(d3dCaps->TextureCaps & D3DPTEXTURECAPS_POW2){
- supportNPOT = false;
- if(d3dCaps->TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL){
- // NPOT conditionl But, in certain cases textures can ignore the power of 2 limitation
- // As OpenGL is UNCONDITIONAL, it is not used by Java3D
- //supportNPOT = true;
- }
- } else {
- //UNconditional: Textures do not need to be a power of 2 in size
- supportNPOT = true;
- }
-
- // check if it supports at least vertex shader 1.1
- if(d3dCaps->VertexShaderVersion < D3DVS_VERSION(1, 1)) {
- supportShaders11 = false;
- }
- else {
- supportShaders11 = true;
- }
-
- DWORD vsVersion = d3dCaps->VertexShaderVersion;
- if (debug) {
- char* dt;
- if (isHardware)
- dt = "HAL";
- else
- dt ="REL";
-
- printf("Java3D: Supported Shaders = %d.%d in mode %s \n",
- HIBYTE(LOWORD(vsVersion)),
- LOBYTE(LOWORD(vsVersion)),
- dt);
- }
-
- //supportStreamOffset =
-
- supportDepthBias = (d3dCaps->RasterCaps & D3DPRASTERCAPS_DEPTHBIAS) != 0;
-
- maxTextureBlendStages = d3dCaps->MaxTextureBlendStages;
- maxSimultaneousTextures = d3dCaps->MaxSimultaneousTextures;
-
- maxTextureUnitStageSupport = min(maxTextureBlendStages, maxSimultaneousTextures);
- supportMipmap = ((d3dCaps->TextureCaps & D3DPTEXTURECAPS_MIPMAP) != 0);
-
- texturePow2Only = ((d3dCaps->TextureCaps & D3DPTEXTURECAPS_POW2) != 0);
-
- textureSquareOnly = ((d3dCaps->TextureCaps & D3DPTEXTURECAPS_SQUAREONLY) != 0);
-
- linePatternSupport = false; //((d3dCaps->PrimitiveMiscCaps & D3DPMISCCAPS_LINEPATTERNREP) != 0);
-
- texBorderModeSupport = ((d3dCaps->TextureAddressCaps & D3DPTADDRESSCAPS_BORDER) != 0);
-
- texLerpSupport = ((d3dCaps->TextureOpCaps & D3DTEXOPCAPS_LERP) != 0);
-
- canRenderWindowed = true;//((d3dCaps->Caps2 & D3DCAPS2_CANRENDERWINDOWED) != 0);
-
-
- maxPrimitiveCount = d3dCaps->MaxPrimitiveCount;
- maxVertexIndex = min(vertexBufferMaxVertexLimit, d3dCaps->MaxVertexIndex);
-
- maxTextureHeight = d3dCaps->MaxTextureHeight;
- maxTextureWidth = d3dCaps->MaxTextureWidth;
- maxTextureDepth = d3dCaps->MaxVolumeExtent;
-
- maxActiveLights = d3dCaps->MaxActiveLights;
- maxPointSize = DWORD(d3dCaps->MaxPointSize);
- maxAnisotropy = d3dCaps->MaxAnisotropy;
-
- maxVertexCount[GEO_TYPE_QUAD_SET] = min(vertexBufferMaxVertexLimit, maxPrimitiveCount << 1);
-
- // Since index is used, we need to make sure than index range
- // is also support.
- maxVertexCount[GEO_TYPE_QUAD_SET] = min(maxVertexCount[GEO_TYPE_QUAD_SET], maxVertexIndex);
-
- maxVertexCount[GEO_TYPE_TRI_SET] = min(vertexBufferMaxVertexLimit, maxPrimitiveCount*3);
-
- maxVertexCount[GEO_TYPE_POINT_SET] = min(vertexBufferMaxVertexLimit, maxPrimitiveCount);
-
- maxVertexCount[GEO_TYPE_LINE_SET] = min(vertexBufferMaxVertexLimit, maxPrimitiveCount << 1);
-
- maxVertexCount[GEO_TYPE_TRI_STRIP_SET] = min(vertexBufferMaxVertexLimit, maxPrimitiveCount + 2);
-
- maxVertexCount[GEO_TYPE_TRI_FAN_SET] = min(vertexBufferMaxVertexLimit, maxPrimitiveCount + 2);
-
- maxVertexCount[GEO_TYPE_LINE_STRIP_SET] = min(vertexBufferMaxVertexLimit,
- maxPrimitiveCount +1);
- maxVertexCount[GEO_TYPE_INDEXED_QUAD_SET] = maxVertexCount[GEO_TYPE_QUAD_SET];
- maxVertexCount[GEO_TYPE_INDEXED_TRI_SET] = maxVertexCount[GEO_TYPE_TRI_SET];
- maxVertexCount[GEO_TYPE_INDEXED_POINT_SET] = maxVertexCount[GEO_TYPE_POINT_SET];
- maxVertexCount[GEO_TYPE_INDEXED_LINE_SET] = maxVertexCount[GEO_TYPE_LINE_SET];
- maxVertexCount[GEO_TYPE_INDEXED_TRI_STRIP_SET] = maxVertexCount[GEO_TYPE_TRI_STRIP_SET];
- maxVertexCount[GEO_TYPE_INDEXED_TRI_FAN_SET] = maxVertexCount[GEO_TYPE_TRI_FAN_SET];
- maxVertexCount[GEO_TYPE_INDEXED_LINE_STRIP_SET] = maxVertexCount[GEO_TYPE_LINE_STRIP_SET];
-
-
- if ( (d3dCaps->PresentationIntervals & D3DPRESENT_INTERVAL_IMMEDIATE) != 0)
- supportRasterPresImmediate = true;
- else
- supportRasterPresImmediate = false;
-
- if (((d3dCaps->RasterCaps & D3DPRASTERCAPS_FOGTABLE) != 0) &&
- ((d3dCaps->RasterCaps & D3DPRASTERCAPS_WFOG) != 0)) {
- // use pixel w-fog
- fogMode = D3DRS_FOGTABLEMODE;
- rangeFogEnable = false;
- }
- else if (((d3dCaps->RasterCaps & D3DPRASTERCAPS_FOGVERTEX) != 0) &&
- ((d3dCaps->RasterCaps & D3DPRASTERCAPS_FOGRANGE) != 0)) {
- // use vertex range based fog
- fogMode = D3DRS_FOGVERTEXMODE;
- rangeFogEnable = true;
- }
- else if ((d3dCaps->RasterCaps & D3DPRASTERCAPS_FOGTABLE) != 0) {
- // use pixel z-fog
- fogMode = D3DRS_FOGTABLEMODE;
- rangeFogEnable = false;
- }
- else if (D3DPRASTERCAPS_FOGVERTEX) {
- // use vertex z-fog
- fogMode = D3DRS_FOGVERTEXMODE;
- rangeFogEnable = false;
- }
- else {
- if (debug) {
- printf("[Java 3D] Fog not support in this device !\n");
- }
- }
-
- texMask = 0;
- if(supportNPOT){
- texMask |= javax_media_j3d_Canvas3D_TEXTURE_NON_POWER_OF_TWO;
- }
-
- if((d3dCaps->Caps2 & D3DCAPS2_CANAUTOGENMIPMAP) != 0) {
- texMask |= javax_media_j3d_Canvas3D_TEXTURE_AUTO_MIPMAP_GENERATION;
- }
-
- if ((d3dCaps->TextureCaps & D3DPTEXTURECAPS_VOLUMEMAP) &&
- (maxTextureDepth > 0)) {
- texMask |= javax_media_j3d_Canvas3D_TEXTURE_3D;
- }
-
- if (d3dCaps->TextureCaps & D3DPTEXTURECAPS_CUBEMAP) {
- texMask |= javax_media_j3d_Canvas3D_TEXTURE_CUBE_MAP;
- }
-
- if (maxTextureUnitStageSupport > 1) {
- texMask |= javax_media_j3d_Canvas3D_TEXTURE_MULTI_TEXTURE;
- }
-
-
- if (d3dCaps->TextureOpCaps & D3DTEXOPCAPS_DOTPRODUCT3) {
- texMask |= javax_media_j3d_Canvas3D_TEXTURE_COMBINE_DOT3;
- }
-
- if (d3dCaps->TextureOpCaps & D3DTEXOPCAPS_SUBTRACT) {
- texMask |= javax_media_j3d_Canvas3D_TEXTURE_COMBINE_SUBTRACT;
- }
-
- if (d3dCaps->TextureOpCaps & D3DTEXOPCAPS_LERP) {
- texMask |= (javax_media_j3d_Canvas3D_TEXTURE_LERP|
- javax_media_j3d_Canvas3D_TEXTURE_COMBINE);
- } else if (d3dCaps->TextureOpCaps &
- (D3DTEXOPCAPS_DOTPRODUCT3|D3DTEXOPCAPS_SUBTRACT|
- D3DTEXOPCAPS_MODULATE|D3DTEXOPCAPS_ADD|
- D3DTEXOPCAPS_ADDSIGNED)) {
- texMask |= javax_media_j3d_Canvas3D_TEXTURE_COMBINE;
- }
-
-
- if (maxAnisotropy > 1) {
- texMask |= javax_media_j3d_Canvas3D_TEXTURE_ANISOTROPIC_FILTER;
- }
-
-}
-
-BOOL D3dDeviceInfo::supportAntialiasing() {
- return (multiSampleSupport != 0);
-}
-
-
-void D3dDeviceInfo::findDepthStencilFormat(int minZDepth, int minZDepthStencil)
-{
- // Fix to Issue 226 : D3D - fail on stress test for the creation and destruction of Canvases
- //sanity check of stencil and depth
- minZDepthStencil = min(minZDepthStencil, 8);
- minZDepth = min(minZDepth, 32);
-
- depthStencilFormat = D3DFMT_UNKNOWN;
-
- for (int i=0; i < D3DDEPTHFORMATSIZE; i++) {
- //printf("\ndepthFormatSupport %s, %b",getPixelFormatName(d3dDepthFormat[i]), depthFormatSupport[i]);
- if (depthFormatSupport[i]){
- // prefer one with stencil buffer, follow by D3DFMT_D16_LOCKABLE,
- // printf("\n ZDepth %d, Stencil %d ",d3dDepthTable[i],d3dStencilDepthTable[i]);
- if (d3dDepthTable[i] >= minZDepth && d3dStencilDepthTable[i] >= minZDepthStencil ) {
- depthStencilFormat = (D3DFORMAT) d3dDepthFormat[i];
- break;
- }
- }//if
- }// for
- // if none suitable found
-}
-
-
-D3DMULTISAMPLE_TYPE D3dDeviceInfo::getBestMultiSampleType()
-{
- DWORD bitmask = 0;
- UINT i;
-
- // Fix to Issue 226 : D3D - fail on stress test for the creation and destruction of Canvases
- // start with 4 and up, if none found, try 3 and 2
- for (i=4; i <= 16; i++) {
- bitmask = (1 << i);
- if (multiSampleSupport & bitmask) {
- return (D3DMULTISAMPLE_TYPE) i;
- }
- }
-
- // try 3 and 2
- for (i=3; i >= 2; i--) {
- bitmask = (1 << i);
- if (multiSampleSupport & bitmask) {
- return (D3DMULTISAMPLE_TYPE) i;
- }
- }
-
- // Should not happen
- return D3DMULTISAMPLE_NONE;
-}
-
-int D3dDeviceInfo::getTextureFeaturesMask()
-{
- return texMask;
-}