NV2A : Prevented incorrectly logged "Unknown Graphics Class/Method" messages.
Also some slight optimizations (and one additional, ignored PGRAPH command : SET_FLAT_SHADE_OP)
This commit is contained in:
parent
c0ca099afb
commit
11bcf70d70
|
@ -423,7 +423,8 @@ int pfifo_puller_thread(NV2AState *d)
|
||||||
state->bound_engines[command->subchannel] = entry.engine;
|
state->bound_engines[command->subchannel] = entry.engine;
|
||||||
state->last_engine = entry.engine;
|
state->last_engine = entry.engine;
|
||||||
cache_unique_lock.unlock();
|
cache_unique_lock.unlock();
|
||||||
} else if (command->method >= 0x100) {
|
}
|
||||||
|
else if (command->method >= 0x100) {
|
||||||
/* method passed to engine */
|
/* method passed to engine */
|
||||||
|
|
||||||
uint32_t parameter = command->parameter;
|
uint32_t parameter = command->parameter;
|
||||||
|
@ -458,6 +459,9 @@ int pfifo_puller_thread(NV2AState *d)
|
||||||
state->last_engine = state->bound_engines[command->subchannel];
|
state->last_engine = state->bound_engines[command->subchannel];
|
||||||
// state->cache_lock.unlock();
|
// state->cache_lock.unlock();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
NV2A_DPRINTF("FIFO: Unknown Method - 0x%08X\n",
|
||||||
|
command->method);
|
||||||
|
|
||||||
g_free(command);
|
g_free(command);
|
||||||
}
|
}
|
||||||
|
@ -468,13 +472,16 @@ int pfifo_puller_thread(NV2AState *d)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int ramht_size(NV2AState *d)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
1 << (GET_MASK(d->pfifo.regs[NV_PFIFO_RAMHT], NV_PFIFO_RAMHT_SIZE_MASK) + 12);
|
||||||
|
}
|
||||||
|
|
||||||
static uint32_t ramht_hash(NV2AState *d, uint32_t handle)
|
static uint32_t ramht_hash(NV2AState *d, uint32_t handle)
|
||||||
{
|
{
|
||||||
unsigned int ramht_size =
|
|
||||||
1 << (GET_MASK(d->pfifo.regs[NV_PFIFO_RAMHT], NV_PFIFO_RAMHT_SIZE_MASK) + 12);
|
|
||||||
|
|
||||||
/* XXX: Think this is different to what nouveau calculates... */
|
/* XXX: Think this is different to what nouveau calculates... */
|
||||||
unsigned int bits = ffs(ramht_size) - 2;
|
unsigned int bits = ffs(ramht_size(d)) - 2;
|
||||||
|
|
||||||
uint32_t hash = 0;
|
uint32_t hash = 0;
|
||||||
while (handle) {
|
while (handle) {
|
||||||
|
@ -488,11 +495,8 @@ static uint32_t ramht_hash(NV2AState *d, uint32_t handle)
|
||||||
|
|
||||||
static RAMHTEntry ramht_lookup(NV2AState *d, uint32_t handle)
|
static RAMHTEntry ramht_lookup(NV2AState *d, uint32_t handle)
|
||||||
{
|
{
|
||||||
unsigned int ramht_size =
|
|
||||||
1 << (GET_MASK(d->pfifo.regs[NV_PFIFO_RAMHT], NV_PFIFO_RAMHT_SIZE_MASK) + 12);
|
|
||||||
|
|
||||||
uint32_t hash = ramht_hash(d, handle);
|
uint32_t hash = ramht_hash(d, handle);
|
||||||
assert(hash * 8 < ramht_size);
|
assert(hash * 8 < ramht_size(d));
|
||||||
|
|
||||||
uint32_t ramht_address =
|
uint32_t ramht_address =
|
||||||
GET_MASK(d->pfifo.regs[NV_PFIFO_RAMHT],
|
GET_MASK(d->pfifo.regs[NV_PFIFO_RAMHT],
|
||||||
|
|
|
@ -578,7 +578,7 @@ static void pgraph_method(NV2AState *d,
|
||||||
context_surfaces_2d->dest_offset = parameter & 0x07FFFFFF;
|
context_surfaces_2d->dest_offset = parameter & 0x07FFFFFF;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
EmuWarning("EmuNV2A: Unknown NV_CONTEXT_SURFACES_2D Method: 0x%08X\n", method);
|
EmuWarning("NV2A: Unknown NV_CONTEXT_SURFACES_2D Method: 0x%08X\n", method);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -671,7 +671,7 @@ static void pgraph_method(NV2AState *d,
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
EmuWarning("EmuNV2A: Unknown NV_IMAGE_BLIT Method: 0x%08X\n", method);
|
EmuWarning("NV2A: Unknown NV_IMAGE_BLIT Method: 0x%08X\n", method);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2555,15 +2555,20 @@ static void pgraph_method(NV2AState *d,
|
||||||
NV2A_DPRINTF("load to %d\n", parameter);
|
NV2A_DPRINTF("load to %d\n", parameter);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case NV097_SET_FLAT_SHADE_OP:
|
||||||
|
assert(parameter <= 1);
|
||||||
|
// TODO : value & 1 = first/last? vertex selection for glShaderMode(GL_FLAT)
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
NV2A_GL_DPRINTF(true, " unhandled (0x%02x 0x%08x)",
|
NV2A_GL_DPRINTF(true, " unhandled (0x%02x 0x%08x)",
|
||||||
object->graphics_class, method);
|
object->graphics_class, method);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
NV2A_GL_DPRINTF(true, "EmuNV2A: Unknown Graphics Class/Method 0x%08X/0x%08X\n",
|
NV2A_GL_DPRINTF(true, "Unknown Graphics Class/Method 0x%08X/0x%08X\n",
|
||||||
object->graphics_class, method);
|
object->graphics_class, method);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,10 +100,10 @@ ArraySizeHelper<N> makeArraySizeHelper(T(&)[N]);
|
||||||
|
|
||||||
// Public Domain ffs Implementation
|
// Public Domain ffs Implementation
|
||||||
// See: http://snipplr.com/view/22147/stringsh-implementation/
|
// See: http://snipplr.com/view/22147/stringsh-implementation/
|
||||||
NV2A_CONSTEXPR int ffs(int v)
|
NV2A_CONSTEXPR unsigned int ffs(const unsigned int v)
|
||||||
{
|
{
|
||||||
unsigned int x = v;
|
unsigned int x = v;
|
||||||
int c = 1;
|
unsigned int c = 1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* adapted from from
|
* adapted from from
|
||||||
|
@ -143,11 +143,11 @@ NV2A_CONSTEXPR int ffs(int v)
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int GET_MASK(int v, int mask) {
|
inline int GET_MASK(const unsigned int v, const unsigned int mask) {
|
||||||
return (((v) & (mask)) >> (ffs(mask) - 1));
|
return (((v) & (mask)) >> (ffs(mask) - 1));
|
||||||
};
|
};
|
||||||
|
|
||||||
inline int SET_MASK(int v, int mask, int val) {
|
inline int SET_MASK(unsigned int v, const unsigned int mask, const unsigned int val) {
|
||||||
const unsigned int __val = (val);
|
const unsigned int __val = (val);
|
||||||
const unsigned int __mask = (mask);
|
const unsigned int __mask = (mask);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue