Commit 6cf65f67 by Chris Forbes

Various fixes for VS-only pipeline

Bug: b/118386749 Test: dEQP-VK.memory_model.* Change-Id: Ie0962df8e17264ec93265cd56b4a79e0d5f37c33 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/31528Tested-by: 's avatarChris Forbes <chrisforbes@google.com> Presubmit-Ready: Chris Forbes <chrisforbes@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com>
parent ab3c36b9
...@@ -164,15 +164,19 @@ namespace sw ...@@ -164,15 +164,19 @@ namespace sw
Dw = *Pointer<Float4>(primitive + OFFSET(Primitive,w.C), 16) + yyyy * *Pointer<Float4>(primitive + OFFSET(Primitive,w.B), 16); Dw = *Pointer<Float4>(primitive + OFFSET(Primitive,w.C), 16) + yyyy * *Pointer<Float4>(primitive + OFFSET(Primitive,w.B), 16);
} }
for (int interpolant = 0; interpolant < MAX_INTERFACE_COMPONENTS; interpolant++) if (spirvShader)
{ {
if (spirvShader->inputs[interpolant].Type == SpirvShader::ATTRIBTYPE_UNUSED) for (int interpolant = 0; interpolant < MAX_INTERFACE_COMPONENTS; interpolant++)
continue;
Dv[interpolant] = *Pointer<Float4>(primitive + OFFSET(Primitive, V[interpolant].C), 16);
if (!spirvShader->inputs[interpolant].Flat)
{ {
Dv[interpolant] += yyyy * *Pointer<Float4>(primitive + OFFSET(Primitive, V[interpolant].B), 16); if (spirvShader->inputs[interpolant].Type == SpirvShader::ATTRIBTYPE_UNUSED)
continue;
Dv[interpolant] = *Pointer<Float4>(primitive + OFFSET(Primitive, V[interpolant].C), 16);
if (!spirvShader->inputs[interpolant].Flat)
{
Dv[interpolant] +=
yyyy * *Pointer<Float4>(primitive + OFFSET(Primitive, V[interpolant].B), 16);
}
} }
} }
......
...@@ -89,9 +89,12 @@ namespace sw ...@@ -89,9 +89,12 @@ namespace sw
state.multiSample = context->sampleCount; state.multiSample = context->sampleCount;
state.rasterizerDiscard = context->rasterizerDiscard; state.rasterizerDiscard = context->rasterizerDiscard;
for (int interpolant = 0; interpolant < MAX_INTERFACE_COMPONENTS; interpolant++) if (context->pixelShader)
{ {
state.gradient[interpolant] = context->pixelShader->inputs[interpolant]; for (int interpolant = 0; interpolant < MAX_INTERFACE_COMPONENTS; interpolant++)
{
state.gradient[interpolant] = context->pixelShader->inputs[interpolant];
}
} }
state.hash = state.computeHash(); state.hash = state.computeHash();
......
...@@ -37,13 +37,15 @@ namespace sw ...@@ -37,13 +37,15 @@ namespace sw
routine(pipelineLayout), routine(pipelineLayout),
descriptorSets(descriptorSets) descriptorSets(descriptorSets)
{ {
spirvShader->emitProlog(&routine); if (spirvShader)
if (forceClearRegisters)
{ {
for (int i = 0; i < MAX_INTERFACE_COMPONENTS; i++) spirvShader->emitProlog(&routine);
if (forceClearRegisters)
{ {
routine.inputs[i] = Float4(0.0f); for (int i = 0; i < MAX_INTERFACE_COMPONENTS; i++)
{
routine.inputs[i] = Float4(0.0f);
}
} }
} }
} }
...@@ -59,7 +61,7 @@ namespace sw ...@@ -59,7 +61,7 @@ namespace sw
#endif #endif
// TODO: consider shader which modifies sample mask in general // TODO: consider shader which modifies sample mask in general
const bool earlyDepthTest = !spirvShader->getModes().DepthReplacing && !state.alphaToCoverage; const bool earlyDepthTest = !spirvShader || (!spirvShader->getModes().DepthReplacing && !state.alphaToCoverage);
Int zMask[4]; // Depth mask Int zMask[4]; // Depth mask
Int sMask[4]; // Stencil mask Int sMask[4]; // Stencil mask
...@@ -147,29 +149,32 @@ namespace sw ...@@ -147,29 +149,32 @@ namespace sw
} }
} }
for (int interpolant = 0; interpolant < MAX_INTERFACE_COMPONENTS; interpolant++) if (spirvShader)
{ {
auto const & input = spirvShader->inputs[interpolant]; for (int interpolant = 0; interpolant < MAX_INTERFACE_COMPONENTS; interpolant++)
if (input.Type != SpirvShader::ATTRIBTYPE_UNUSED)
{ {
if (input.Centroid && state.multiSample > 1) auto const &input = spirvShader->inputs[interpolant];
{ if (input.Type != SpirvShader::ATTRIBTYPE_UNUSED)
routine.inputs[interpolant] =
interpolateCentroid(XXXX, YYYY, rhwCentroid,
primitive + OFFSET(Primitive, V[interpolant]),
input.Flat, !input.NoPerspective);
}
else
{ {
routine.inputs[interpolant] = if (input.Centroid && state.multiSample > 1)
interpolate(xxxx, Dv[interpolant], rhw, {
primitive + OFFSET(Primitive, V[interpolant]), routine.inputs[interpolant] =
input.Flat, !input.NoPerspective, false); interpolateCentroid(XXXX, YYYY, rhwCentroid,
primitive + OFFSET(Primitive, V[interpolant]),
input.Flat, !input.NoPerspective);
}
else
{
routine.inputs[interpolant] =
interpolate(xxxx, Dv[interpolant], rhw,
primitive + OFFSET(Primitive, V[interpolant]),
input.Flat, !input.NoPerspective, false);
}
} }
} }
}
setBuiltins(x, y, z, w); setBuiltins(x, y, z, w);
}
#if PERF_PROFILE #if PERF_PROFILE
cycles[PERF_INTERP] += Ticks() - interpTime; cycles[PERF_INTERP] += Ticks() - interpTime;
......
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