mirror of
https://github.com/doitsujin/dxvk.git
synced 2024-12-02 10:24:12 +01:00
[dxvk] Don't check if bindings have changed in the backend
The state tracker should perform these checks before sending commands off to the backend anyway, so checking again in the backend is redundant.
This commit is contained in:
parent
b6c395c013
commit
63fe899bdc
@ -140,41 +140,29 @@ namespace dxvk {
|
|||||||
void DxvkContext::bindDrawBuffers(
|
void DxvkContext::bindDrawBuffers(
|
||||||
const DxvkBufferSlice& argBuffer,
|
const DxvkBufferSlice& argBuffer,
|
||||||
const DxvkBufferSlice& cntBuffer) {
|
const DxvkBufferSlice& cntBuffer) {
|
||||||
if (!m_state.id.argBuffer.matches(argBuffer)
|
|
||||||
|| !m_state.id.argBuffer.matches(cntBuffer)) {
|
|
||||||
m_state.id.argBuffer = argBuffer;
|
m_state.id.argBuffer = argBuffer;
|
||||||
m_state.id.cntBuffer = cntBuffer;
|
m_state.id.cntBuffer = cntBuffer;
|
||||||
|
|
||||||
m_flags.set(DxvkContextFlag::DirtyDrawBuffer);
|
m_flags.set(DxvkContextFlag::DirtyDrawBuffer);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void DxvkContext::bindIndexBuffer(
|
void DxvkContext::bindIndexBuffer(
|
||||||
const DxvkBufferSlice& buffer,
|
const DxvkBufferSlice& buffer,
|
||||||
VkIndexType indexType) {
|
VkIndexType indexType) {
|
||||||
bool needsUpdate = !m_state.vi.indexBuffer.matchesBuffer(buffer);
|
if (!m_state.vi.indexBuffer.matchesBuffer(buffer))
|
||||||
|
|
||||||
if (likely(!needsUpdate)) {
|
|
||||||
needsUpdate = !m_state.vi.indexBuffer.matchesRange(buffer)
|
|
||||||
|| m_state.vi.indexType != indexType;
|
|
||||||
} else {
|
|
||||||
m_vbTracked.clr(MaxNumVertexBindings);
|
m_vbTracked.clr(MaxNumVertexBindings);
|
||||||
}
|
|
||||||
|
|
||||||
if (needsUpdate) {
|
|
||||||
m_state.vi.indexBuffer = buffer;
|
m_state.vi.indexBuffer = buffer;
|
||||||
m_state.vi.indexType = indexType;
|
m_state.vi.indexType = indexType;
|
||||||
|
|
||||||
m_flags.set(DxvkContextFlag::GpDirtyIndexBuffer);
|
m_flags.set(DxvkContextFlag::GpDirtyIndexBuffer);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void DxvkContext::bindResourceBuffer(
|
void DxvkContext::bindResourceBuffer(
|
||||||
uint32_t slot,
|
uint32_t slot,
|
||||||
const DxvkBufferSlice& buffer) {
|
const DxvkBufferSlice& buffer) {
|
||||||
if (!m_rc[slot].bufferSlice.matches(buffer)) {
|
|
||||||
m_rc[slot].bufferSlice = buffer;
|
m_rc[slot].bufferSlice = buffer;
|
||||||
m_rcTracked.clr(slot);
|
m_rcTracked.clr(slot);
|
||||||
|
|
||||||
@ -182,15 +170,12 @@ namespace dxvk {
|
|||||||
DxvkContextFlag::CpDirtyResources,
|
DxvkContextFlag::CpDirtyResources,
|
||||||
DxvkContextFlag::GpDirtyResources);
|
DxvkContextFlag::GpDirtyResources);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void DxvkContext::bindResourceView(
|
void DxvkContext::bindResourceView(
|
||||||
uint32_t slot,
|
uint32_t slot,
|
||||||
const Rc<DxvkImageView>& imageView,
|
const Rc<DxvkImageView>& imageView,
|
||||||
const Rc<DxvkBufferView>& bufferView) {
|
const Rc<DxvkBufferView>& bufferView) {
|
||||||
if (m_rc[slot].imageView != imageView
|
|
||||||
|| m_rc[slot].bufferView != bufferView) {
|
|
||||||
m_rc[slot].imageView = imageView;
|
m_rc[slot].imageView = imageView;
|
||||||
m_rc[slot].bufferView = bufferView;
|
m_rc[slot].bufferView = bufferView;
|
||||||
m_rc[slot].bufferSlice = bufferView != nullptr
|
m_rc[slot].bufferSlice = bufferView != nullptr
|
||||||
@ -202,13 +187,11 @@ namespace dxvk {
|
|||||||
DxvkContextFlag::CpDirtyResources,
|
DxvkContextFlag::CpDirtyResources,
|
||||||
DxvkContextFlag::GpDirtyResources);
|
DxvkContextFlag::GpDirtyResources);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void DxvkContext::bindResourceSampler(
|
void DxvkContext::bindResourceSampler(
|
||||||
uint32_t slot,
|
uint32_t slot,
|
||||||
const Rc<DxvkSampler>& sampler) {
|
const Rc<DxvkSampler>& sampler) {
|
||||||
if (m_rc[slot].sampler != sampler) {
|
|
||||||
m_rc[slot].sampler = sampler;
|
m_rc[slot].sampler = sampler;
|
||||||
m_rcTracked.clr(slot);
|
m_rcTracked.clr(slot);
|
||||||
|
|
||||||
@ -216,7 +199,6 @@ namespace dxvk {
|
|||||||
DxvkContextFlag::CpDirtyResources,
|
DxvkContextFlag::CpDirtyResources,
|
||||||
DxvkContextFlag::GpDirtyResources);
|
DxvkContextFlag::GpDirtyResources);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void DxvkContext::bindShader(
|
void DxvkContext::bindShader(
|
||||||
@ -234,7 +216,6 @@ namespace dxvk {
|
|||||||
default: return;
|
default: return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shaderStage->shader != shader) {
|
|
||||||
shaderStage->shader = shader;
|
shaderStage->shader = shader;
|
||||||
|
|
||||||
if (stage == VK_SHADER_STAGE_COMPUTE_BIT) {
|
if (stage == VK_SHADER_STAGE_COMPUTE_BIT) {
|
||||||
@ -249,29 +230,22 @@ namespace dxvk {
|
|||||||
DxvkContextFlag::GpDirtyResources);
|
DxvkContextFlag::GpDirtyResources);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void DxvkContext::bindVertexBuffer(
|
void DxvkContext::bindVertexBuffer(
|
||||||
uint32_t binding,
|
uint32_t binding,
|
||||||
const DxvkBufferSlice& buffer,
|
const DxvkBufferSlice& buffer,
|
||||||
uint32_t stride) {
|
uint32_t stride) {
|
||||||
bool needsUpdate = !m_state.vi.vertexBuffers[binding].matchesBuffer(buffer);
|
if (!m_state.vi.vertexBuffers[binding].matchesBuffer(buffer))
|
||||||
|
|
||||||
if (likely(!needsUpdate))
|
|
||||||
needsUpdate = !m_state.vi.vertexBuffers[binding].matchesRange(buffer);
|
|
||||||
else
|
|
||||||
m_vbTracked.clr(binding);
|
m_vbTracked.clr(binding);
|
||||||
|
|
||||||
if (needsUpdate) {
|
|
||||||
m_state.vi.vertexBuffers[binding] = buffer;
|
m_state.vi.vertexBuffers[binding] = buffer;
|
||||||
m_flags.set(DxvkContextFlag::GpDirtyVertexBuffers);
|
m_flags.set(DxvkContextFlag::GpDirtyVertexBuffers);
|
||||||
}
|
|
||||||
|
|
||||||
if (unlikely(!buffer.defined()))
|
if (unlikely(!buffer.defined()))
|
||||||
stride = 0;
|
stride = 0;
|
||||||
|
|
||||||
if (m_state.vi.vertexStrides[binding] != stride) {
|
if (unlikely(m_state.vi.vertexStrides[binding] != stride)) {
|
||||||
m_state.vi.vertexStrides[binding] = stride;
|
m_state.vi.vertexStrides[binding] = stride;
|
||||||
m_flags.set(DxvkContextFlag::GpDirtyPipelineState);
|
m_flags.set(DxvkContextFlag::GpDirtyPipelineState);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user