Commit 56dda25f by Branimir Karadžić Committed by Nicolas Capens

Fixed D3DQUERYTYPE_TIMESTAMP behaviour.

A timestamp query records the current time when it's issued, not when the data is being retrieved. Change-Id: Idb6e7fe6736a5b54bd23ef1613eaf953da86aa08 Reviewed-on: https://swiftshader-review.googlesource.com/5771Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com> Tested-by: 's avatarNicolas Capens <nicolascapens@google.com>
parent 64ed0d75
...@@ -169,7 +169,13 @@ namespace D3D9 ...@@ -169,7 +169,13 @@ namespace D3D9
device->setOcclusionEnabled(false); device->setOcclusionEnabled(false);
} }
break; break;
case D3DQUERYTYPE_TIMESTAMP: if(flags != D3DISSUE_END) return INVALIDCALL(); break; case D3DQUERYTYPE_TIMESTAMP:
if(flags == D3DISSUE_END)
{
timestamp = sw::Timer::counter();
}
else return INVALIDCALL();
break;
case D3DQUERYTYPE_TIMESTAMPDISJOINT: if(flags != D3DISSUE_BEGIN && flags != D3DISSUE_END) return INVALIDCALL(); break; case D3DQUERYTYPE_TIMESTAMPDISJOINT: if(flags != D3DISSUE_BEGIN && flags != D3DISSUE_END) return INVALIDCALL(); break;
case D3DQUERYTYPE_TIMESTAMPFREQ: if(flags != D3DISSUE_END) return INVALIDCALL(); break; case D3DQUERYTYPE_TIMESTAMPFREQ: if(flags != D3DISSUE_END) return INVALIDCALL(); break;
case D3DQUERYTYPE_PIPELINETIMINGS: if(flags != D3DISSUE_BEGIN && flags != D3DISSUE_END) return INVALIDCALL(); break; case D3DQUERYTYPE_PIPELINETIMINGS: if(flags != D3DISSUE_BEGIN && flags != D3DISSUE_END) return INVALIDCALL(); break;
...@@ -227,7 +233,7 @@ namespace D3D9 ...@@ -227,7 +233,7 @@ namespace D3D9
case D3DQUERYTYPE_OCCLUSION: case D3DQUERYTYPE_OCCLUSION:
*(DWORD*)data = query->data; *(DWORD*)data = query->data;
break; break;
case D3DQUERYTYPE_TIMESTAMP: *(UINT64*)data = sw::Timer::counter(); break; // FIXME: Verify behaviour case D3DQUERYTYPE_TIMESTAMP: *(UINT64*)data = timestamp; break; // FIXME: Verify behaviour
case D3DQUERYTYPE_TIMESTAMPDISJOINT: *(BOOL*)data = FALSE; break; // FIXME: Verify behaviour case D3DQUERYTYPE_TIMESTAMPDISJOINT: *(BOOL*)data = FALSE; break; // FIXME: Verify behaviour
case D3DQUERYTYPE_TIMESTAMPFREQ: *(UINT64*)data = sw::Timer::frequency(); break; // FIXME: Verify behaviour case D3DQUERYTYPE_TIMESTAMPFREQ: *(UINT64*)data = sw::Timer::frequency(); break; // FIXME: Verify behaviour
case D3DQUERYTYPE_PIPELINETIMINGS: UNIMPLEMENTED(); break; case D3DQUERYTYPE_PIPELINETIMINGS: UNIMPLEMENTED(); break;
......
...@@ -49,7 +49,9 @@ namespace D3D9 ...@@ -49,7 +49,9 @@ namespace D3D9
Direct3DDevice9 *const device; Direct3DDevice9 *const device;
const D3DQUERYTYPE type; const D3DQUERYTYPE type;
sw::Query *query; // TODO: create a union, or subclasses for each type.
sw::Query *query; // D3DQUERYTYPE_OCCLUSION
UINT64 timestamp; // D3DQUERYTYPE_TIMESTAMP
}; };
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment