mirror of
https://github.com/skyline-emu/skyline.git
synced 2025-02-02 21:02:36 +01:00
Transition rasterization state to pipeline cache key
This commit is contained in:
parent
9a6efb091c
commit
1f844e2c18
@ -477,20 +477,27 @@ namespace skyline::gpu::interconnect::maxwell3d {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizationState::Flush() {
|
void RasterizationState::Flush(Key &key) {
|
||||||
auto &rasterizationCreateInfo{rasterizationState.get<vk::PipelineRasterizationStateCreateInfo>()};
|
key.rasterizerDiscardEnable = !engine->rasterEnable;
|
||||||
rasterizationCreateInfo.rasterizerDiscardEnable = !engine->rasterEnable;
|
key.SetPolygonMode(engine->frontPolygonMode);
|
||||||
rasterizationCreateInfo.polygonMode = ConvertPolygonMode(engine->frontPolygonMode);
|
|
||||||
if (engine->backPolygonMode != engine->frontPolygonMode)
|
if (engine->backPolygonMode != engine->frontPolygonMode)
|
||||||
Logger::Warn("Non-matching polygon modes!");
|
Logger::Warn("Non-matching polygon modes!");
|
||||||
|
|
||||||
rasterizationCreateInfo.cullMode = engine->oglCullEnable ? ConvertCullMode(engine->oglCullFace) : vk::CullModeFlagBits::eNone;
|
if (engine->oglCullEnable) {
|
||||||
|
key.cullModeFront = engine->oglCullFace == engine::CullFace::Front || engine->oglCullFace == engine::CullFace::FrontAndBack;
|
||||||
|
key.cullModeBack = engine->oglCullFace == engine::CullFace::Back || engine->oglCullFace == engine::CullFace::FrontAndBack;
|
||||||
|
} else {
|
||||||
|
key.cullModeFront = key.cullModeBack = false;
|
||||||
|
}
|
||||||
|
|
||||||
// UpdateRuntimeInformation(runtimeInfo.y_negate, enabled, maxwell3d::PipelineStage::Vertex, maxwell3d::PipelineStage::Fragment);
|
// UpdateRuntimeInformation(runtimeInfo.y_negate, enabled, maxwell3d::PipelineStage::Vertex, maxwell3d::PipelineStage::Fragment);
|
||||||
|
|
||||||
|
key.flipYEnable = engine->windowOrigin.flipY;
|
||||||
|
|
||||||
bool origFrontFaceClockwise{engine->oglFrontFace == engine::FrontFace::CW};
|
bool origFrontFaceClockwise{engine->oglFrontFace == engine::FrontFace::CW};
|
||||||
rasterizationCreateInfo.frontFace = (engine->windowOrigin.flipY != origFrontFaceClockwise) ? vk::FrontFace::eClockwise : vk::FrontFace::eCounterClockwise;
|
key.frontFaceClockwise = (key.flipYEnable != origFrontFaceClockwise);
|
||||||
rasterizationCreateInfo.depthBiasEnable = ConvertDepthBiasEnable(engine->polyOffset, engine->frontPolygonMode);
|
key.depthBiasEnable = ConvertDepthBiasEnable(engine->polyOffset, engine->frontPolygonMode);
|
||||||
rasterizationState.get<vk::PipelineRasterizationProvokingVertexStateCreateInfoEXT>().provokingVertexMode = ConvertProvokingVertex(engine->provokingVertex.value);
|
key.provokingVertex = engine->provokingVertex.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Depth Stencil State */
|
/* Depth Stencil State */
|
||||||
@ -789,12 +796,12 @@ namespace skyline::gpu::interconnect::maxwell3d {
|
|||||||
|
|
||||||
vertexInput.Update(key);
|
vertexInput.Update(key);
|
||||||
directState.inputAssembly.Update(key);
|
directState.inputAssembly.Update(key);
|
||||||
|
|
||||||
tessellation.Update(key);
|
tessellation.Update(key);
|
||||||
const auto &rasterizationState{rasterization.UpdateGet().rasterizationState};
|
rasterization.Update(key);
|
||||||
vk::PipelineMultisampleStateCreateInfo multisampleState{
|
/* vk::PipelineMultisampleStateCreateInfo multisampleState{
|
||||||
.rasterizationSamples = vk::SampleCountFlagBits::e1
|
.rasterizationSamples = vk::SampleCountFlagBits::e1
|
||||||
};
|
}; */
|
||||||
|
|
||||||
const auto &depthStencilState{depthStencil.UpdateGet().depthStencilState};
|
const auto &depthStencilState{depthStencil.UpdateGet().depthStencilState};
|
||||||
const auto &colorBlendState{colorBlend.UpdateGet(ctx, colorAttachments.size()).colorBlendState};
|
const auto &colorBlendState{colorBlend.UpdateGet(ctx, colorAttachments.size()).colorBlendState};
|
||||||
|
|
||||||
|
@ -17,6 +17,14 @@ namespace skyline::gpu::interconnect::maxwell3d {
|
|||||||
engine::TessellationParameters::DomainType domainType : 2; //!< Use SetTessellationParameters
|
engine::TessellationParameters::DomainType domainType : 2; //!< Use SetTessellationParameters
|
||||||
engine::TessellationParameters::Spacing spacing : 2; //!< Use SetTessellationParameters
|
engine::TessellationParameters::Spacing spacing : 2; //!< Use SetTessellationParameters
|
||||||
engine::TessellationParameters::OutputPrimitives outputPrimitives : 2; //!< Use SetTessellationParameters
|
engine::TessellationParameters::OutputPrimitives outputPrimitives : 2; //!< Use SetTessellationParameters
|
||||||
|
bool rasterizerDiscardEnable : 1;
|
||||||
|
u8 polygonMode : 2; //!< Use {Set, Get}PolygonMode
|
||||||
|
bool cullModeFront : 1;
|
||||||
|
bool cullModeBack : 1;
|
||||||
|
bool flipYEnable : 1;
|
||||||
|
bool frontFaceClockwise : 1; //!< With Y flip transformation already applied
|
||||||
|
bool depthBiasEnable : 1;
|
||||||
|
engine::ProvokingVertex::Value provokingVertex : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct VertexBinding {
|
struct VertexBinding {
|
||||||
@ -53,6 +61,10 @@ namespace skyline::gpu::interconnect::maxwell3d {
|
|||||||
spacing = parameters.spacing;
|
spacing = parameters.spacing;
|
||||||
outputPrimitives = parameters.outputPrimitives;
|
outputPrimitives = parameters.outputPrimitives;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetPolygonMode(engine::PolygonMode mode) {
|
||||||
|
polygonMode = static_cast<u8>(static_cast<u32>(mode) - 0x1B00);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class ColorRenderTargetState : dirty::ManualDirty {
|
class ColorRenderTargetState : dirty::ManualDirty {
|
||||||
@ -194,7 +206,7 @@ namespace skyline::gpu::interconnect::maxwell3d {
|
|||||||
|
|
||||||
RasterizationState(dirty::Handle dirtyHandle, DirtyManager &manager, const EngineRegisters &engine);
|
RasterizationState(dirty::Handle dirtyHandle, DirtyManager &manager, const EngineRegisters &engine);
|
||||||
|
|
||||||
void Flush();
|
void Flush(Key &key);
|
||||||
};
|
};
|
||||||
|
|
||||||
class DepthStencilState : dirty::ManualDirty {
|
class DepthStencilState : dirty::ManualDirty {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user