mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-21 13:54:18 +01:00
[dxvk] Moved context flags out of context state object
This commit is contained in:
parent
4e39ef859b
commit
c936709aec
@ -25,10 +25,10 @@ namespace dxvk {
|
|||||||
// The current state of the internal command buffer is
|
// The current state of the internal command buffer is
|
||||||
// undefined, so we have to bind and set up everything
|
// undefined, so we have to bind and set up everything
|
||||||
// before any draw or dispatch command is recorded.
|
// before any draw or dispatch command is recorded.
|
||||||
m_state.flags.clr(
|
m_flags.clr(
|
||||||
DxvkContextFlag::GpRenderPassBound);
|
DxvkContextFlag::GpRenderPassBound);
|
||||||
|
|
||||||
m_state.flags.set(
|
m_flags.set(
|
||||||
DxvkContextFlag::GpDirtyPipeline,
|
DxvkContextFlag::GpDirtyPipeline,
|
||||||
DxvkContextFlag::GpDirtyPipelineState,
|
DxvkContextFlag::GpDirtyPipelineState,
|
||||||
DxvkContextFlag::GpDirtyDynamicState,
|
DxvkContextFlag::GpDirtyDynamicState,
|
||||||
@ -61,7 +61,7 @@ namespace dxvk {
|
|||||||
const DxvkBufferBinding& buffer) {
|
const DxvkBufferBinding& buffer) {
|
||||||
if (m_state.vi.indexBuffer != buffer) {
|
if (m_state.vi.indexBuffer != buffer) {
|
||||||
m_state.vi.indexBuffer = buffer;
|
m_state.vi.indexBuffer = buffer;
|
||||||
m_state.flags.set(DxvkContextFlag::GpDirtyIndexBuffer);
|
m_flags.set(DxvkContextFlag::GpDirtyIndexBuffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,11 +75,11 @@ namespace dxvk {
|
|||||||
stageState->shader = shader;
|
stageState->shader = shader;
|
||||||
|
|
||||||
if (stage == VK_SHADER_STAGE_COMPUTE_BIT) {
|
if (stage == VK_SHADER_STAGE_COMPUTE_BIT) {
|
||||||
m_state.flags.set(
|
m_flags.set(
|
||||||
DxvkContextFlag::CpDirtyPipeline,
|
DxvkContextFlag::CpDirtyPipeline,
|
||||||
DxvkContextFlag::CpDirtyResources);
|
DxvkContextFlag::CpDirtyResources);
|
||||||
} else {
|
} else {
|
||||||
m_state.flags.set(
|
m_flags.set(
|
||||||
DxvkContextFlag::GpDirtyPipeline,
|
DxvkContextFlag::GpDirtyPipeline,
|
||||||
DxvkContextFlag::GpDirtyPipelineState,
|
DxvkContextFlag::GpDirtyPipelineState,
|
||||||
DxvkContextFlag::GpDirtyResources,
|
DxvkContextFlag::GpDirtyResources,
|
||||||
@ -95,7 +95,7 @@ namespace dxvk {
|
|||||||
const DxvkBufferBinding& buffer) {
|
const DxvkBufferBinding& buffer) {
|
||||||
if (m_state.vi.vertexBuffers.at(binding) != buffer) {
|
if (m_state.vi.vertexBuffers.at(binding) != buffer) {
|
||||||
m_state.vi.vertexBuffers.at(binding) = buffer;
|
m_state.vi.vertexBuffers.at(binding) = buffer;
|
||||||
m_state.flags.set(DxvkContextFlag::GpDirtyVertexBuffers);
|
m_flags.set(DxvkContextFlag::GpDirtyVertexBuffers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -209,7 +209,7 @@ namespace dxvk {
|
|||||||
const VkRect2D* scissorRects) {
|
const VkRect2D* scissorRects) {
|
||||||
if (m_state.vp.viewportCount != viewportCount) {
|
if (m_state.vp.viewportCount != viewportCount) {
|
||||||
m_state.vp.viewportCount = viewportCount;
|
m_state.vp.viewportCount = viewportCount;
|
||||||
m_state.flags.set(DxvkContextFlag::GpDirtyPipelineState);
|
m_flags.set(DxvkContextFlag::GpDirtyPipelineState);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (uint32_t i = 0; i < viewportCount; i++) {
|
for (uint32_t i = 0; i < viewportCount; i++) {
|
||||||
@ -225,7 +225,7 @@ namespace dxvk {
|
|||||||
const Rc<DxvkInputAssemblyState>& state) {
|
const Rc<DxvkInputAssemblyState>& state) {
|
||||||
if (m_state.co.inputAssemblyState != state) {
|
if (m_state.co.inputAssemblyState != state) {
|
||||||
m_state.co.inputAssemblyState = state;
|
m_state.co.inputAssemblyState = state;
|
||||||
m_state.flags.set(DxvkContextFlag::GpDirtyPipelineState);
|
m_flags.set(DxvkContextFlag::GpDirtyPipelineState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -234,7 +234,7 @@ namespace dxvk {
|
|||||||
const Rc<DxvkInputLayout>& state) {
|
const Rc<DxvkInputLayout>& state) {
|
||||||
if (m_state.co.inputLayout != state) {
|
if (m_state.co.inputLayout != state) {
|
||||||
m_state.co.inputLayout = state;
|
m_state.co.inputLayout = state;
|
||||||
m_state.flags.set(DxvkContextFlag::GpDirtyPipelineState);
|
m_flags.set(DxvkContextFlag::GpDirtyPipelineState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -243,7 +243,7 @@ namespace dxvk {
|
|||||||
const Rc<DxvkRasterizerState>& state) {
|
const Rc<DxvkRasterizerState>& state) {
|
||||||
if (m_state.co.rasterizerState != state) {
|
if (m_state.co.rasterizerState != state) {
|
||||||
m_state.co.rasterizerState = state;
|
m_state.co.rasterizerState = state;
|
||||||
m_state.flags.set(DxvkContextFlag::GpDirtyPipelineState);
|
m_flags.set(DxvkContextFlag::GpDirtyPipelineState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -252,7 +252,7 @@ namespace dxvk {
|
|||||||
const Rc<DxvkMultisampleState>& state) {
|
const Rc<DxvkMultisampleState>& state) {
|
||||||
if (m_state.co.multisampleState != state) {
|
if (m_state.co.multisampleState != state) {
|
||||||
m_state.co.multisampleState = state;
|
m_state.co.multisampleState = state;
|
||||||
m_state.flags.set(DxvkContextFlag::GpDirtyPipelineState);
|
m_flags.set(DxvkContextFlag::GpDirtyPipelineState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,7 +261,7 @@ namespace dxvk {
|
|||||||
const Rc<DxvkDepthStencilState>& state) {
|
const Rc<DxvkDepthStencilState>& state) {
|
||||||
if (m_state.co.depthStencilState != state) {
|
if (m_state.co.depthStencilState != state) {
|
||||||
m_state.co.depthStencilState = state;
|
m_state.co.depthStencilState = state;
|
||||||
m_state.flags.set(DxvkContextFlag::GpDirtyPipelineState);
|
m_flags.set(DxvkContextFlag::GpDirtyPipelineState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -270,15 +270,15 @@ namespace dxvk {
|
|||||||
const Rc<DxvkBlendState>& state) {
|
const Rc<DxvkBlendState>& state) {
|
||||||
if (m_state.co.blendState != state) {
|
if (m_state.co.blendState != state) {
|
||||||
m_state.co.blendState = state;
|
m_state.co.blendState = state;
|
||||||
m_state.flags.set(DxvkContextFlag::GpDirtyPipelineState);
|
m_flags.set(DxvkContextFlag::GpDirtyPipelineState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void DxvkContext::renderPassBegin() {
|
void DxvkContext::renderPassBegin() {
|
||||||
if (!m_state.flags.test(DxvkContextFlag::GpRenderPassBound)
|
if (!m_flags.test(DxvkContextFlag::GpRenderPassBound)
|
||||||
&& (m_state.om.framebuffer != nullptr)) {
|
&& (m_state.om.framebuffer != nullptr)) {
|
||||||
m_state.flags.set(DxvkContextFlag::GpRenderPassBound);
|
m_flags.set(DxvkContextFlag::GpRenderPassBound);
|
||||||
|
|
||||||
const DxvkFramebufferSize fbSize
|
const DxvkFramebufferSize fbSize
|
||||||
= m_state.om.framebuffer->size();
|
= m_state.om.framebuffer->size();
|
||||||
@ -305,8 +305,8 @@ namespace dxvk {
|
|||||||
|
|
||||||
|
|
||||||
void DxvkContext::renderPassEnd() {
|
void DxvkContext::renderPassEnd() {
|
||||||
if (m_state.flags.test(DxvkContextFlag::GpRenderPassBound)) {
|
if (m_flags.test(DxvkContextFlag::GpRenderPassBound)) {
|
||||||
m_state.flags.clr(DxvkContextFlag::GpRenderPassBound);
|
m_flags.clr(DxvkContextFlag::GpRenderPassBound);
|
||||||
m_cmd->cmdEndRenderPass();
|
m_cmd->cmdEndRenderPass();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -318,17 +318,17 @@ namespace dxvk {
|
|||||||
|
|
||||||
|
|
||||||
void DxvkContext::bindGraphicsPipeline() {
|
void DxvkContext::bindGraphicsPipeline() {
|
||||||
if (m_state.flags.test(DxvkContextFlag::GpDirtyPipeline)) {
|
if (m_flags.test(DxvkContextFlag::GpDirtyPipeline)) {
|
||||||
m_state.flags.clr(DxvkContextFlag::GpDirtyPipeline);
|
m_flags.clr(DxvkContextFlag::GpDirtyPipeline);
|
||||||
|
|
||||||
m_state.activeGraphicsPipeline = m_pipeMgr->getGraphicsPipeline(
|
m_state.activeGraphicsPipeline = m_pipeMgr->getGraphicsPipeline(
|
||||||
m_state.vs.shader, m_state.tcs.shader, m_state.tes.shader,
|
m_state.vs.shader, m_state.tcs.shader, m_state.tes.shader,
|
||||||
m_state.gs.shader, m_state.fs.shader);
|
m_state.gs.shader, m_state.fs.shader);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_state.flags.test(DxvkContextFlag::GpDirtyPipelineState)
|
if (m_flags.test(DxvkContextFlag::GpDirtyPipelineState)
|
||||||
&& m_state.activeGraphicsPipeline != nullptr) {
|
&& m_state.activeGraphicsPipeline != nullptr) {
|
||||||
m_state.flags.clr(DxvkContextFlag::GpDirtyPipelineState);
|
m_flags.clr(DxvkContextFlag::GpDirtyPipelineState);
|
||||||
|
|
||||||
DxvkGraphicsPipelineStateInfo gpState;
|
DxvkGraphicsPipelineStateInfo gpState;
|
||||||
gpState.inputAssemblyState = m_state.co.inputAssemblyState;
|
gpState.inputAssemblyState = m_state.co.inputAssemblyState;
|
||||||
@ -348,8 +348,8 @@ namespace dxvk {
|
|||||||
|
|
||||||
|
|
||||||
void DxvkContext::updateDynamicState() {
|
void DxvkContext::updateDynamicState() {
|
||||||
if (m_state.flags.test(DxvkContextFlag::GpDirtyDynamicState)) {
|
if (m_flags.test(DxvkContextFlag::GpDirtyDynamicState)) {
|
||||||
m_state.flags.clr(DxvkContextFlag::GpDirtyDynamicState);
|
m_flags.clr(DxvkContextFlag::GpDirtyDynamicState);
|
||||||
|
|
||||||
this->updateViewports();
|
this->updateViewports();
|
||||||
}
|
}
|
||||||
@ -363,8 +363,8 @@ namespace dxvk {
|
|||||||
|
|
||||||
|
|
||||||
void DxvkContext::updateIndexBufferBinding() {
|
void DxvkContext::updateIndexBufferBinding() {
|
||||||
if (m_state.flags.test(DxvkContextFlag::GpDirtyIndexBuffer)) {
|
if (m_flags.test(DxvkContextFlag::GpDirtyIndexBuffer)) {
|
||||||
m_state.flags.clr(DxvkContextFlag::GpDirtyIndexBuffer);
|
m_flags.clr(DxvkContextFlag::GpDirtyIndexBuffer);
|
||||||
|
|
||||||
if (m_state.vi.indexBuffer.bufferHandle() != VK_NULL_HANDLE) {
|
if (m_state.vi.indexBuffer.bufferHandle() != VK_NULL_HANDLE) {
|
||||||
m_cmd->cmdBindIndexBuffer(
|
m_cmd->cmdBindIndexBuffer(
|
||||||
@ -379,8 +379,8 @@ namespace dxvk {
|
|||||||
|
|
||||||
|
|
||||||
void DxvkContext::updateVertexBufferBindings() {
|
void DxvkContext::updateVertexBufferBindings() {
|
||||||
if (m_state.flags.test(DxvkContextFlag::GpDirtyVertexBuffers)) {
|
if (m_flags.test(DxvkContextFlag::GpDirtyVertexBuffers)) {
|
||||||
m_state.flags.clr(DxvkContextFlag::GpDirtyVertexBuffers);
|
m_flags.clr(DxvkContextFlag::GpDirtyVertexBuffers);
|
||||||
|
|
||||||
for (uint32_t i = 0; i < m_state.vi.vertexBuffers.size(); i++) {
|
for (uint32_t i = 0; i < m_state.vi.vertexBuffers.size(); i++) {
|
||||||
const DxvkBufferBinding vbo = m_state.vi.vertexBuffers.at(i);
|
const DxvkBufferBinding vbo = m_state.vi.vertexBuffers.at(i);
|
||||||
|
@ -226,6 +226,7 @@ namespace dxvk {
|
|||||||
const Rc<DxvkPipelineManager> m_pipeMgr;
|
const Rc<DxvkPipelineManager> m_pipeMgr;
|
||||||
|
|
||||||
Rc<DxvkCommandList> m_cmd;
|
Rc<DxvkCommandList> m_cmd;
|
||||||
|
DxvkContextFlags m_flags;
|
||||||
DxvkContextState m_state;
|
DxvkContextState m_state;
|
||||||
DxvkBarrierSet m_barriers;
|
DxvkBarrierSet m_barriers;
|
||||||
|
|
||||||
@ -247,8 +248,6 @@ namespace dxvk {
|
|||||||
DxvkShaderStageState* getShaderStage(
|
DxvkShaderStageState* getShaderStage(
|
||||||
VkShaderStageFlagBits stage);
|
VkShaderStageFlagBits stage);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
@ -79,8 +79,6 @@ namespace dxvk {
|
|||||||
|
|
||||||
Rc<DxvkGraphicsPipeline> activeGraphicsPipeline;
|
Rc<DxvkGraphicsPipeline> activeGraphicsPipeline;
|
||||||
Rc<DxvkComputePipeline> activeComputePipeline;
|
Rc<DxvkComputePipeline> activeComputePipeline;
|
||||||
|
|
||||||
DxvkContextFlags flags;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user