nvidiaacceleration.java
来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 856 行 · 第 1/3 页
JAVA
856 行
setACC(NVACC_PR_CTX1_1, 0x00000c02); /* format is X16RGB16, LSB mono */
setACC(NVACC_PR_CTX1_2, 0x00000b02); /* format is A16RGB16, LSB mono */
setACC(NVACC_PR_CTX1_3, 0x00000c02); /* format is X16RGB16, LSB mono */
setACC(NVACC_PR_CTX1_4, 0x00000c02); /* format is X16RGB16, LSB mono */
setACC(NVACC_PR_CTX1_5, 0x00000c02); /* format is X16RGB16, LSB mono */
setACC(NVACC_PR_CTX1_9, 0x00000c02); /* format is X16RGB16, LSB mono */
setACC(NVACC_PR_CTX2_9, 0x00000c02); /* dma_instance 0 valid, instance 1 invalid */
if (architecture == NV04A) {
setACC(NVACC_PR_CTX1_B, 0x00000702); /* format is X1RGB15, LSB mono */
setACC(NVACC_PR_CTX1_C, 0x00000702); /* format is X1RGB15, LSB mono */
} else {
setACC(NVACC_PR_CTX1_B, 0x00000c02); /* format is X16RGB16, LSB mono */
setACC(NVACC_PR_CTX1_C, 0x00000c02); /* format is X16RGB16, LSB mono */
setACC(NVACC_PR_CTX1_E, 0x00000c02); /* format is X16RGB16, LSB mono */
}
setACC(NVACC_PR_CTX1_D, 0x00000c02); /* format is X16RGB16, LSB mono */
break;
case 32 :
/* acc engine */
setACC(NVACC_FORMATS, 0x000070e5);
if (architecture < NV30A)
setACC(NVACC_BPIXEL, 0x0077d777); /* set depth 0-5: 4 bits per color */
else
setACC(NVACC_BPIXEL, 0x000000e7); /* set depth 0-1: 5 bits per color */
setACC(NVACC_STRD_FMT, 0x0e0d0d0d);
/* PRAMIN */
setACC(NVACC_PR_CTX1_0, 0x00000e02); /* format is X8RGB24, LSB mono */
setACC(NVACC_PR_CTX1_1, 0x00000e02); /* format is X8RGB24, LSB mono */
setACC(NVACC_PR_CTX1_2, 0x00000d02); /* format is A8RGB24, LSB mono */
setACC(NVACC_PR_CTX1_3, 0x00000e02); /* format is X8RGB24, LSB mono */
setACC(NVACC_PR_CTX1_4, 0x00000e02); /* format is X8RGB24, LSB mono */
setACC(NVACC_PR_CTX1_5, 0x00000e02); /* format is X8RGB24, LSB mono */
setACC(NVACC_PR_CTX1_9, 0x00000e02); /* format is X8RGB24, LSB mono */
setACC(NVACC_PR_CTX2_9, 0x00000e02); /* dma_instance 0 valid, instance 1 invalid */
setACC(NVACC_PR_CTX1_B, 0x00000e02); /* format is X8RGB24, LSB mono */
setACC(NVACC_PR_CTX1_C, 0x00000e02); /* format is X8RGB24, LSB mono */
setACC(NVACC_PR_CTX1_D, 0x00000e02); /* format is X8RGB24, LSB mono */
if (architecture >= NV10A)
setACC(NVACC_PR_CTX1_E, 0x00000e02); /* format is X8RGB24, LSB mono */
break;
default :
throw new IllegalArgumentException("ACC: init, invalid bit depth " + bitsPerPixel);
}
/* setup some extra stuff for NV30A */
if (architecture == NV30A) {
/*
* fixme: Does not belong here (and not needed?) if(!chip->flatPanel) { chip->PRAMDAC0[0x0578/4] = state->vpllB; //0x00680578 = ??? never modified! chip->PRAMDAC0[0x057C/4] =
* state->vpll2B; //0x0068057c = ??? never modified! }
*/
/* activate Zcullflush(?) */
setACC(NVACC_DEBUG3, (getACC(NVACC_DEBUG3) | 0x00000001));
/* unknown */
setACC(NVACC_NV30_WHAT, (getACC(NVACC_NV30_WHAT) | 0x00040000));
}
/** * setup screen location and pitch ** */
switch (architecture) {
case NV04A :
case NV10A :
/* location of active screen in framebuffer */
setACC(NVACC_OFFSET0, frameBufferOffset);
setACC(NVACC_OFFSET1, frameBufferOffset);
setACC(NVACC_OFFSET2, frameBufferOffset);
setACC(NVACC_OFFSET3, frameBufferOffset);
setACC(NVACC_OFFSET4, frameBufferOffset);
setACC(NVACC_OFFSET5, frameBufferOffset);
/* setup buffer pitch */
setACC(NVACC_PITCH0, bytesPerRow & 0x0000ffff);
setACC(NVACC_PITCH1, bytesPerRow & 0x0000ffff);
setACC(NVACC_PITCH2, bytesPerRow & 0x0000ffff);
setACC(NVACC_PITCH3, bytesPerRow & 0x0000ffff);
setACC(NVACC_PITCH4, bytesPerRow & 0x0000ffff);
break;
case NV20A :
case NV30A :
/* location of active screen in framebuffer */
setACC(NVACC_NV20_OFFSET0, frameBufferOffset);
setACC(NVACC_NV20_OFFSET1, frameBufferOffset);
setACC(NVACC_NV20_OFFSET2, frameBufferOffset);
setACC(NVACC_NV20_OFFSET3, frameBufferOffset);
/* setup buffer pitch */
setACC(NVACC_NV20_PITCH0, bytesPerRow & 0x0000ffff);
setACC(NVACC_NV20_PITCH1, bytesPerRow & 0x0000ffff);
setACC(NVACC_NV20_PITCH2, bytesPerRow & 0x0000ffff);
setACC(NVACC_NV20_PITCH3, bytesPerRow & 0x0000ffff);
break;
}
/** * setup tile and pipe stuff ** */
if (architecture >= NV10A) {
/*
* fixme: setup elsewhere (does not belong here): chip->PRAMDAC[0x00000404/4] |= (1 << 25);//0x00680404 = ???
*/
/* setup acc engine tile stuff: */
/* reset tile adresses */
setACC(NVACC_NV10_FBTIL0AD, 0);
setACC(NVACC_NV10_FBTIL1AD, 0);
setACC(NVACC_NV10_FBTIL2AD, 0);
setACC(NVACC_NV10_FBTIL3AD, 0);
setACC(NVACC_NV10_FBTIL4AD, 0);
setACC(NVACC_NV10_FBTIL5AD, 0);
setACC(NVACC_NV10_FBTIL6AD, 0);
setACC(NVACC_NV10_FBTIL7AD, 0);
/* copy tile setup stuff from 'source' to acc engine */
if (architecture >= NV20A) {
/* unknown: */
setACC(NVACC_NV20_WHAT0, getACC(NVACC_NV20_FBWHAT0));
setACC(NVACC_NV20_WHAT1, getACC(NVACC_NV20_FBWHAT1));
}
/* tile 0: */
/* tile invalid, tile adress = $00000 (18bit) */
setACC(NVACC_NV10_TIL0AD, getACC(NVACC_NV10_FBTIL0AD));
/* set tile end adress (18bit) */
setACC(NVACC_NV10_TIL0ED, getACC(NVACC_NV10_FBTIL0ED));
/* set tile size pitch (8bit: b8-15) */
setACC(NVACC_NV10_TIL0PT, getACC(NVACC_NV10_FBTIL0PT));
/* set tile status */
setACC(NVACC_NV10_TIL0ST, getACC(NVACC_NV10_FBTIL0ST));
/* tile 1: */
setACC(NVACC_NV10_TIL1AD, getACC(NVACC_NV10_FBTIL1AD));
setACC(NVACC_NV10_TIL1ED, getACC(NVACC_NV10_FBTIL1ED));
setACC(NVACC_NV10_TIL1PT, getACC(NVACC_NV10_FBTIL1PT));
setACC(NVACC_NV10_TIL1ST, getACC(NVACC_NV10_FBTIL1ST));
/* tile 2: */
setACC(NVACC_NV10_TIL2AD, getACC(NVACC_NV10_FBTIL2AD));
setACC(NVACC_NV10_TIL2ED, getACC(NVACC_NV10_FBTIL2ED));
setACC(NVACC_NV10_TIL2PT, getACC(NVACC_NV10_FBTIL2PT));
setACC(NVACC_NV10_TIL2ST, getACC(NVACC_NV10_FBTIL2ST));
/* tile 3: */
setACC(NVACC_NV10_TIL3AD, getACC(NVACC_NV10_FBTIL3AD));
setACC(NVACC_NV10_TIL3ED, getACC(NVACC_NV10_FBTIL3ED));
setACC(NVACC_NV10_TIL3PT, getACC(NVACC_NV10_FBTIL3PT));
setACC(NVACC_NV10_TIL3ST, getACC(NVACC_NV10_FBTIL3ST));
/* tile 4: */
setACC(NVACC_NV10_TIL4AD, getACC(NVACC_NV10_FBTIL4AD));
setACC(NVACC_NV10_TIL4ED, getACC(NVACC_NV10_FBTIL4ED));
setACC(NVACC_NV10_TIL4PT, getACC(NVACC_NV10_FBTIL4PT));
setACC(NVACC_NV10_TIL4ST, getACC(NVACC_NV10_FBTIL4ST));
/* tile 5: */
setACC(NVACC_NV10_TIL5AD, getACC(NVACC_NV10_FBTIL5AD));
setACC(NVACC_NV10_TIL5ED, getACC(NVACC_NV10_FBTIL5ED));
setACC(NVACC_NV10_TIL5PT, getACC(NVACC_NV10_FBTIL5PT));
setACC(NVACC_NV10_TIL5ST, getACC(NVACC_NV10_FBTIL5ST));
/* tile 6: */
setACC(NVACC_NV10_TIL6AD, getACC(NVACC_NV10_FBTIL6AD));
setACC(NVACC_NV10_TIL6ED, getACC(NVACC_NV10_FBTIL6ED));
setACC(NVACC_NV10_TIL6PT, getACC(NVACC_NV10_FBTIL6PT));
setACC(NVACC_NV10_TIL6ST, getACC(NVACC_NV10_FBTIL6ST));
/* tile 7: */
setACC(NVACC_NV10_TIL7AD, getACC(NVACC_NV10_FBTIL7AD));
setACC(NVACC_NV10_TIL7ED, getACC(NVACC_NV10_FBTIL7ED));
setACC(NVACC_NV10_TIL7PT, getACC(NVACC_NV10_FBTIL7PT));
setACC(NVACC_NV10_TIL7ST, getACC(NVACC_NV10_FBTIL7ST));
/* setup pipe */
/* set eyetype to local, lightning is off */
setACC(NVACC_NV10_XFMOD0, 0x10000000);
/* disable all lights */
setACC(NVACC_NV10_XFMOD1, 0x00000000);
setACC(NVACC_NV10_PIPEADR, 0x00000040);
setACC(NVACC_NV10_PIPEDAT, 0x00000008);
setACC(NVACC_NV10_PIPEADR, 0x00000200);
for (int cnt = 0; cnt < (3 * 16); cnt++)
setACC(NVACC_NV10_PIPEDAT, 0x00000000);
setACC(NVACC_NV10_PIPEADR, 0x00000040);
setACC(NVACC_NV10_PIPEDAT, 0x00000000);
setACC(NVACC_NV10_PIPEADR, 0x00000800);
for (int cnt = 0; cnt < (16 * 16); cnt++)
setACC(NVACC_NV10_PIPEDAT, 0x00000000);
/* turn lightning on */
setACC(NVACC_NV10_XFMOD0, 0x30000000);
/* set light 1 to infinite type, other lights remain off */
setACC(NVACC_NV10_XFMOD1, 0x00000004);
setACC(NVACC_NV10_PIPEADR, 0x00006400);
for (int cnt = 0; cnt < (59 * 4); cnt++)
setACC(NVACC_NV10_PIPEDAT, 0x00000000);
setACC(NVACC_NV10_PIPEADR, 0x00006800);
for (int cnt = 0; cnt < (47 * 4); cnt++)
setACC(NVACC_NV10_PIPEDAT, 0x00000000);
setACC(NVACC_NV10_PIPEADR, 0x00006c00);
for (int cnt = 0; cnt < (3 * 4); cnt++)
setACC(NVACC_NV10_PIPEDAT, 0x00000000);
setACC(NVACC_NV10_PIPEADR, 0x00007000);
for (int cnt = 0; cnt < (19 * 4); cnt++)
setACC(NVACC_NV10_PIPEDAT, 0x00000000);
setACC(NVACC_NV10_PIPEADR, 0x00007400);
for (int cnt = 0; cnt < (12 * 4); cnt++)
setACC(NVACC_NV10_PIPEDAT, 0x00000000);
setACC(NVACC_NV10_PIPEADR, 0x00007800);
for (int cnt = 0; cnt < (12 * 4); cnt++)
setACC(NVACC_NV10_PIPEDAT, 0x00000000);
setACC(NVACC_NV10_PIPEADR, 0x00004400);
for (int cnt = 0; cnt < (8 * 4); cnt++)
setACC(NVACC_NV10_PIPEDAT, 0x00000000);
setACC(NVACC_NV10_PIPEADR, 0x00000000);
for (int cnt = 0; cnt < 16; cnt++)
setACC(NVACC_NV10_PIPEDAT, 0x00000000);
setACC(NVACC_NV10_PIPEADR, 0x00000040);
for (int cnt = 0; cnt < 4; cnt++)
setACC(NVACC_NV10_PIPEDAT, 0x00000000);
}
/** * setup acceleration engine command shortcuts (so via fifo) ** */
/* (b31 = 1 selects 'config' function?) */
setACC(NVACC_FIFO_00800000, 0x80000000); /* Raster OPeration */
setACC(NVACC_FIFO_00802000, 0x80000001); /* Clip */
setACC(NVACC_FIFO_00804000, 0x80000002); /* Pattern */
setACC(NVACC_FIFO_00806000, 0x80000010); /* Pixmap (not used) */
setACC(NVACC_FIFO_00808000, 0x80000011); /* Blit */
setACC(NVACC_FIFO_0080a000, 0x80000012); /* Bitmap */
setACC(NVACC_FIFO_0080c000, 0x80000016); /* Line (not used) */
setACC(NVACC_FIFO_0080e000, 0x80000014); /* ??? (not used) */
/*
* do first actual acceleration engine command: setup clipping region (workspace size) to 32768 x 32768 pixels: wait for room in fifo for clipping cmd if needed. (fifo holds 256 32bit words:
* count those, not bytes)
*/
while (((io.getReg16(NV16_CLP_FIFOFREE)) >> 2) < 2) {
try {
/* snooze a bit so I do not hammer the bus */
Thread.sleep(10);
} catch (InterruptedException ex) {
// Ignore
}
}
/* now setup clipping (writing 2 32bit words) */
setACC(NVACC_CLP_TOPLEFT, 0x00000000);
setACC(NVACC_CLP_WIDHEIGHT, 0x80008000);
}
/**
* Wait until engine completely idle.
*/
/*
* private final void waitUntilIdle() { while (getACC(NVACC_STATUS) != 0) { snooze(25); }
*/
/**
* Read from the acceleration engine registers.
*
* @param reg
* @return int
*/
private final int getACC(int reg) {
return io.getReg32(reg);
}
/**
* Write to the acceleration engine registers.
*
* @param reg
*/
private final void setACC(int reg, int value) {
io.setReg32(reg, value);
}
private final void snooze(long ms) {
try {
Thread.sleep(ms);
} catch (InterruptedException ex) {
// Ignore
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?