mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-27 04:54:15 +01:00
[d3d8] Adjust function, declaration and delete behavior for VS/PS
This commit is contained in:
parent
4f98844f47
commit
dd183b4a53
@ -1683,13 +1683,15 @@ namespace dxvk {
|
|||||||
D3D8VertexShaderInfo& info = m_vertexShaders.emplace_back();
|
D3D8VertexShaderInfo& info = m_vertexShaders.emplace_back();
|
||||||
|
|
||||||
// Store D3D8 bytecodes in the shader info
|
// Store D3D8 bytecodes in the shader info
|
||||||
if (pDeclaration != nullptr)
|
for (UINT i = 0; pDeclaration[i] != D3DVSD_END(); i++)
|
||||||
for (UINT i = 0; pDeclaration[i+1] != D3DVSD_END(); i++)
|
info.declaration.push_back(pDeclaration[i]);
|
||||||
info.declaration.push_back(pDeclaration[i]);
|
info.declaration.push_back(D3DVSD_END());
|
||||||
|
|
||||||
if (pFunction != nullptr)
|
if (pFunction != nullptr) {
|
||||||
for (UINT i = 0; pFunction[i+1] != D3DVS_END(); i++)
|
for (UINT i = 0; pFunction[i] != D3DVS_END(); i++)
|
||||||
info.function.push_back(pFunction[i]);
|
info.function.push_back(pFunction[i]);
|
||||||
|
info.function.push_back(D3DVS_END());
|
||||||
|
}
|
||||||
|
|
||||||
D3D9VertexShaderCode result = TranslateVertexShader8(pDeclaration, pFunction, m_d3d8Options);
|
D3D9VertexShaderCode result = TranslateVertexShader8(pDeclaration, pFunction, m_d3d8Options);
|
||||||
|
|
||||||
@ -1829,6 +1831,9 @@ namespace dxvk {
|
|||||||
|
|
||||||
info->declaration.clear();
|
info->declaration.clear();
|
||||||
info->function.clear();
|
info->function.clear();
|
||||||
|
|
||||||
|
if (m_currentVertexShader == Handle)
|
||||||
|
m_currentVertexShader = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return D3D_OK;
|
return D3D_OK;
|
||||||
@ -1854,8 +1859,10 @@ namespace dxvk {
|
|||||||
|
|
||||||
// D3D8-specific behavior
|
// D3D8-specific behavior
|
||||||
if (SizeOfData < ActualSize) {
|
if (SizeOfData < ActualSize) {
|
||||||
*pSizeOfData = ActualSize;
|
// D3DERR_MOREDATA should be returned according to the D3D8 documentation,
|
||||||
return D3DERR_MOREDATA;
|
// along with a correction to the ActualSize, however tests have shown that
|
||||||
|
// D3DERR_INVALIDCALL is returned and no size correction is performed.
|
||||||
|
return D3DERR_INVALIDCALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(pData, pInfo->declaration.data(), ActualSize);
|
memcpy(pData, pInfo->declaration.data(), ActualSize);
|
||||||
@ -1882,8 +1889,10 @@ namespace dxvk {
|
|||||||
|
|
||||||
// D3D8-specific behavior
|
// D3D8-specific behavior
|
||||||
if (SizeOfData < ActualSize) {
|
if (SizeOfData < ActualSize) {
|
||||||
*pSizeOfData = ActualSize;
|
// D3DERR_MOREDATA should be returned according to the D3D8 documentation,
|
||||||
return D3DERR_MOREDATA;
|
// along with a correction to the ActualSize, however tests have shown that
|
||||||
|
// D3DERR_INVALIDCALL is returned and no size correction is performed.
|
||||||
|
return D3DERR_INVALIDCALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(pData, pInfo->function.data(), ActualSize);
|
memcpy(pData, pInfo->function.data(), ActualSize);
|
||||||
@ -1986,6 +1995,9 @@ namespace dxvk {
|
|||||||
|
|
||||||
m_pixelShaders[getShaderIndex(Handle)] = nullptr;
|
m_pixelShaders[getShaderIndex(Handle)] = nullptr;
|
||||||
|
|
||||||
|
if (m_currentPixelShader == Handle)
|
||||||
|
m_currentPixelShader = 0;
|
||||||
|
|
||||||
return D3D_OK;
|
return D3D_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2010,8 +2022,10 @@ namespace dxvk {
|
|||||||
|
|
||||||
// D3D8-specific behavior
|
// D3D8-specific behavior
|
||||||
if (SizeOfData < ActualSize) {
|
if (SizeOfData < ActualSize) {
|
||||||
*pSizeOfData = ActualSize;
|
// D3DERR_MOREDATA should be returned according to the D3D8 documentation,
|
||||||
return D3DERR_MOREDATA;
|
// along with a correction to the ActualSize, however tests have shown that
|
||||||
|
// D3DERR_INVALIDCALL is returned and no size correction is performed.
|
||||||
|
return D3DERR_INVALIDCALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return pPixelShader->GetFunction(pData, &SizeOfData);
|
return pPixelShader->GetFunction(pData, &SizeOfData);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user