1
0
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:
Philip Rebohle 2017-12-01 10:27:33 +01:00
parent 4e39ef859b
commit c936709aec
3 changed files with 28 additions and 31 deletions

View File

@ -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);

View File

@ -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);
}; };
} }

View File

@ -79,8 +79,6 @@ namespace dxvk {
Rc<DxvkGraphicsPipeline> activeGraphicsPipeline; Rc<DxvkGraphicsPipeline> activeGraphicsPipeline;
Rc<DxvkComputePipeline> activeComputePipeline; Rc<DxvkComputePipeline> activeComputePipeline;
DxvkContextFlags flags;
}; };
} }