better implementation of buildStreamDecl038

This commit is contained in:
Adam Jensen 2022-07-18 16:52:16 +01:00
parent 30e5219ae8
commit b0cfb5a710
3 changed files with 54 additions and 9 deletions

View File

@ -18,6 +18,7 @@ VertexAttributeLayoutA *PCDX11Material::mg_layoutA;
PCDX11Material *PCDX11Material::mg_material;
void *PCDX11Material::mg_cbdata;
MaterialInstanceData *PCDX11Material::mg_matInstance;
bool PCDX11Material::mg_tesselate;
void PCDX11Material::load(MaterialBlob *newBlob) {
auto deviceContext = renderDevice->getD3DDeviceContext(); // HACK
@ -458,11 +459,46 @@ PCDX11StreamDecl *PCDX11Material::buildStreamDecl038(
float floatX,
float floatY)
{
float opacity = matInstance->float10 * floatX;
uint32_t blendState = materialBlob->blendStateC;
bool x = true;
if ((materialBlob->dword18 & 1) == 0 ||
renderDevice->scene78->byte25C ||
(blendState & 1) ||
opacity < 1.0
)
x = false;
uint32_t subMaterialIndex;
if (flag) {
subMaterialIndex = 8;
setupSinglePassTranslucent(renderDevice, /*0,*/ matInstance, flags, floatX);
} else {
subMaterialIndex = 3;
setupSinglePassOpaque(renderDevice, /*0,*/ matInstance, flags);
}
bool noPixelShader = flags & 1;
if (noPixelShader)
subMaterialIndex = 0;
auto *stateManager = deviceManager->getStateManager();
const uint32_t subMaterialIndex = 3;
MaterialBlobSub *subMaterial = materialBlob->subMat4C[subMaterialIndex];
setupDepthBias(matInstance);
if (mg_material != this) {
setupPixelResources(subMaterialIndex, subMaterial, matInstance, (char*)drawableExtDword50, true);
setupVertexResources(subMaterialIndex, subMaterial, matInstance, (char*)drawableExtDword50, true);
setupDepthBias(matInstance);
} else if (mg_matInstance != matInstance || mg_cbdata != drawableExtDword50) {
setupPixelResources(subMaterialIndex, subMaterial, matInstance, (char*)drawableExtDword50, false);
setupVertexResources(subMaterialIndex, subMaterial, matInstance, (char*)drawableExtDword50, false);
setupDepthBias(matInstance);
}
bool tesselate = false;
uint32_t vsSelectAndFlags = (vsSelect << 8) | flags;
//setupStencil(matInstance, true, flags);
stateManager->setDepthRange(matInstance->minDepth, matInstance->maxDepth);
stateManager->setBlendStateAndBlendFactors(materialBlob->blendState24, 0, 0);
@ -480,9 +516,6 @@ PCDX11StreamDecl *PCDX11Material::buildStreamDecl038(
auto vertexShader = (*vertexTable)[vertexIndex];
stateManager->setVertexShader(vertexShader);
setupPixelResources(subMaterialIndex, subMaterial, matInstance, (char*)drawableExtDword50, true);
setupVertexResources(subMaterialIndex, subMaterial, matInstance, (char*)drawableExtDword50, true);
auto *streamDecl = static_cast<PCDX11StreamDecl*>(matInstance->streamDecls24[subMaterialIndex]);
if (!streamDecl) {
VertexAttributeLayoutB *layoutB = subMaterial->vsLayout[vsSelect];
@ -494,7 +527,15 @@ PCDX11StreamDecl *PCDX11Material::buildStreamDecl038(
&vertexShader->m_sub);
}
return streamDecl;
mg_streamDecl = streamDecl;
mg_matInstance = matInstance;
mg_material = this;
mg_cbdata = drawableExtDword50;
mg_vsSelectAndFlags = vsSelectAndFlags;
mg_tesselate = tesselate;
return mg_streamDecl;
}
PCDX11StreamDecl *PCDX11Material::buildStreamDecl7(

View File

@ -34,6 +34,7 @@ class PCDX11Material :
static PCDX11Material *mg_material; // 00EAAD20
static void *mg_cbdata; // 00EAAD24
static MaterialInstanceData *mg_matInstance; // 00EAAD28
static bool mg_tesselate; // 00EAAD2C
public:
PCDX11Material(PCDX11RenderDevice *renderDevice) :

View File

@ -173,9 +173,12 @@ bool PCDX11CompositePassCallbacks::pre(
uint32_t priorPassesBitfield)
{
// TODO
auto *stateManager = deviceManager->getStateManager();
PCDX11BaseTexture *shadowBuffer = nullptr;
stateManager->setTextureAndSampler(10, shadowBuffer, 0, 0.0f);
if (drawableCount) {
PCDX11Material::invalidate();
auto *stateManager = deviceManager->getStateManager();
PCDX11BaseTexture *shadowBuffer = nullptr;
stateManager->setTextureAndSampler(10, shadowBuffer, 0, 0.0f);
}
// TODO
return true;
}