mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-20 19:54:19 +01:00
[dxvk] Inline all frequently-used binding methods
This commit is contained in:
parent
d4d87123b4
commit
758ba5a80d
@ -142,92 +142,6 @@ namespace dxvk {
|
||||
}
|
||||
|
||||
|
||||
void DxvkContext::bindRenderTargets(
|
||||
const DxvkRenderTargets& targets) {
|
||||
// Set up default render pass ops
|
||||
m_state.om.renderTargets = targets;
|
||||
|
||||
this->resetRenderPassOps(
|
||||
m_state.om.renderTargets,
|
||||
m_state.om.renderPassOps);
|
||||
|
||||
if (!m_state.om.framebufferInfo.hasTargets(targets)) {
|
||||
// Create a new framebuffer object next
|
||||
// time we start rendering something
|
||||
m_flags.set(DxvkContextFlag::GpDirtyFramebuffer);
|
||||
} else {
|
||||
// Don't redundantly spill the render pass if
|
||||
// the same render targets are bound again
|
||||
m_flags.clr(DxvkContextFlag::GpDirtyFramebuffer);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void DxvkContext::bindDrawBuffers(
|
||||
const DxvkBufferSlice& argBuffer,
|
||||
const DxvkBufferSlice& cntBuffer) {
|
||||
m_state.id.argBuffer = argBuffer;
|
||||
m_state.id.cntBuffer = cntBuffer;
|
||||
|
||||
m_flags.set(DxvkContextFlag::DirtyDrawBuffer);
|
||||
}
|
||||
|
||||
|
||||
void DxvkContext::bindIndexBuffer(
|
||||
const DxvkBufferSlice& buffer,
|
||||
VkIndexType indexType) {
|
||||
if (!m_state.vi.indexBuffer.matchesBuffer(buffer))
|
||||
m_vbTracked.clr(MaxNumVertexBindings);
|
||||
|
||||
m_state.vi.indexBuffer = buffer;
|
||||
m_state.vi.indexType = indexType;
|
||||
|
||||
m_flags.set(DxvkContextFlag::GpDirtyIndexBuffer);
|
||||
}
|
||||
|
||||
|
||||
void DxvkContext::bindResourceBuffer(
|
||||
VkShaderStageFlags stages,
|
||||
uint32_t slot,
|
||||
const DxvkBufferSlice& buffer) {
|
||||
bool needsUpdate = !m_rc[slot].bufferSlice.matchesBuffer(buffer);
|
||||
|
||||
if (likely(needsUpdate))
|
||||
m_rcTracked.clr(slot);
|
||||
|
||||
m_rc[slot].bufferSlice = buffer;
|
||||
|
||||
m_descriptorState.dirtyBuffers(stages);
|
||||
}
|
||||
|
||||
|
||||
void DxvkContext::bindResourceView(
|
||||
VkShaderStageFlags stages,
|
||||
uint32_t slot,
|
||||
const Rc<DxvkImageView>& imageView,
|
||||
const Rc<DxvkBufferView>& bufferView) {
|
||||
m_rc[slot].imageView = imageView;
|
||||
m_rc[slot].bufferView = bufferView;
|
||||
m_rc[slot].bufferSlice = bufferView != nullptr
|
||||
? bufferView->slice()
|
||||
: DxvkBufferSlice();
|
||||
m_rcTracked.clr(slot);
|
||||
|
||||
m_descriptorState.dirtyViews(stages);
|
||||
}
|
||||
|
||||
|
||||
void DxvkContext::bindResourceSampler(
|
||||
VkShaderStageFlags stages,
|
||||
uint32_t slot,
|
||||
const Rc<DxvkSampler>& sampler) {
|
||||
m_rc[slot].sampler = sampler;
|
||||
m_rcTracked.clr(slot);
|
||||
|
||||
m_descriptorState.dirtyViews(stages);
|
||||
}
|
||||
|
||||
|
||||
void DxvkContext::bindShader(
|
||||
VkShaderStageFlagBits stage,
|
||||
const Rc<DxvkShader>& shader) {
|
||||
@ -257,37 +171,6 @@ namespace dxvk {
|
||||
}
|
||||
|
||||
|
||||
void DxvkContext::bindVertexBuffer(
|
||||
uint32_t binding,
|
||||
const DxvkBufferSlice& buffer,
|
||||
uint32_t stride) {
|
||||
if (!m_state.vi.vertexBuffers[binding].matchesBuffer(buffer))
|
||||
m_vbTracked.clr(binding);
|
||||
|
||||
m_state.vi.vertexBuffers[binding] = buffer;
|
||||
m_flags.set(DxvkContextFlag::GpDirtyVertexBuffers);
|
||||
|
||||
if (unlikely(m_state.vi.vertexStrides[binding] != stride)) {
|
||||
m_state.vi.vertexStrides[binding] = stride;
|
||||
m_flags.set(DxvkContextFlag::GpDirtyPipelineState);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void DxvkContext::bindXfbBuffer(
|
||||
uint32_t binding,
|
||||
const DxvkBufferSlice& buffer,
|
||||
const DxvkBufferSlice& counter) {
|
||||
if (!m_state.xfb.buffers [binding].matches(buffer)
|
||||
|| !m_state.xfb.counters[binding].matches(counter)) {
|
||||
m_state.xfb.buffers [binding] = buffer;
|
||||
m_state.xfb.counters[binding] = counter;
|
||||
|
||||
m_flags.set(DxvkContextFlag::GpDirtyXfbBuffers);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void DxvkContext::blitImage(
|
||||
const Rc<DxvkImage>& dstImage,
|
||||
const VkComponentMapping& dstMapping,
|
||||
|
@ -87,7 +87,24 @@ namespace dxvk {
|
||||
* \param [in] targets Render targets to bind
|
||||
*/
|
||||
void bindRenderTargets(
|
||||
const DxvkRenderTargets& targets);
|
||||
const DxvkRenderTargets& targets) {
|
||||
// Set up default render pass ops
|
||||
m_state.om.renderTargets = targets;
|
||||
|
||||
this->resetRenderPassOps(
|
||||
m_state.om.renderTargets,
|
||||
m_state.om.renderPassOps);
|
||||
|
||||
if (!m_state.om.framebufferInfo.hasTargets(targets)) {
|
||||
// Create a new framebuffer object next
|
||||
// time we start rendering something
|
||||
m_flags.set(DxvkContextFlag::GpDirtyFramebuffer);
|
||||
} else {
|
||||
// Don't redundantly spill the render pass if
|
||||
// the same render targets are bound again
|
||||
m_flags.clr(DxvkContextFlag::GpDirtyFramebuffer);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Binds indirect argument buffer
|
||||
@ -99,7 +116,12 @@ namespace dxvk {
|
||||
*/
|
||||
void bindDrawBuffers(
|
||||
const DxvkBufferSlice& argBuffer,
|
||||
const DxvkBufferSlice& cntBuffer);
|
||||
const DxvkBufferSlice& cntBuffer) {
|
||||
m_state.id.argBuffer = argBuffer;
|
||||
m_state.id.cntBuffer = cntBuffer;
|
||||
|
||||
m_flags.set(DxvkContextFlag::DirtyDrawBuffer);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Binds index buffer
|
||||
@ -111,7 +133,15 @@ namespace dxvk {
|
||||
*/
|
||||
void bindIndexBuffer(
|
||||
const DxvkBufferSlice& buffer,
|
||||
VkIndexType indexType);
|
||||
VkIndexType indexType) {
|
||||
if (!m_state.vi.indexBuffer.matchesBuffer(buffer))
|
||||
m_vbTracked.clr(MaxNumVertexBindings);
|
||||
|
||||
m_state.vi.indexBuffer = buffer;
|
||||
m_state.vi.indexType = indexType;
|
||||
|
||||
m_flags.set(DxvkContextFlag::GpDirtyIndexBuffer);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Binds buffer as a shader resource
|
||||
@ -124,7 +154,16 @@ namespace dxvk {
|
||||
void bindResourceBuffer(
|
||||
VkShaderStageFlags stages,
|
||||
uint32_t slot,
|
||||
const DxvkBufferSlice& buffer);
|
||||
const DxvkBufferSlice& buffer) {
|
||||
bool needsUpdate = !m_rc[slot].bufferSlice.matchesBuffer(buffer);
|
||||
|
||||
if (likely(needsUpdate))
|
||||
m_rcTracked.clr(slot);
|
||||
|
||||
m_rc[slot].bufferSlice = buffer;
|
||||
|
||||
m_descriptorState.dirtyBuffers(stages);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Binds image or buffer view
|
||||
@ -141,7 +180,16 @@ namespace dxvk {
|
||||
VkShaderStageFlags stages,
|
||||
uint32_t slot,
|
||||
const Rc<DxvkImageView>& imageView,
|
||||
const Rc<DxvkBufferView>& bufferView);
|
||||
const Rc<DxvkBufferView>& bufferView) {
|
||||
m_rc[slot].imageView = imageView;
|
||||
m_rc[slot].bufferView = bufferView;
|
||||
m_rc[slot].bufferSlice = bufferView != nullptr
|
||||
? bufferView->slice()
|
||||
: DxvkBufferSlice();
|
||||
m_rcTracked.clr(slot);
|
||||
|
||||
m_descriptorState.dirtyViews(stages);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Binds image sampler
|
||||
@ -155,7 +203,12 @@ namespace dxvk {
|
||||
void bindResourceSampler(
|
||||
VkShaderStageFlags stages,
|
||||
uint32_t slot,
|
||||
const Rc<DxvkSampler>& sampler);
|
||||
const Rc<DxvkSampler>& sampler) {
|
||||
m_rc[slot].sampler = sampler;
|
||||
m_rcTracked.clr(slot);
|
||||
|
||||
m_descriptorState.dirtyViews(stages);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Binds a shader to a given state
|
||||
@ -178,7 +231,18 @@ namespace dxvk {
|
||||
void bindVertexBuffer(
|
||||
uint32_t binding,
|
||||
const DxvkBufferSlice& buffer,
|
||||
uint32_t stride);
|
||||
uint32_t stride) {
|
||||
if (!m_state.vi.vertexBuffers[binding].matchesBuffer(buffer))
|
||||
m_vbTracked.clr(binding);
|
||||
|
||||
m_state.vi.vertexBuffers[binding] = buffer;
|
||||
m_flags.set(DxvkContextFlag::GpDirtyVertexBuffers);
|
||||
|
||||
if (unlikely(m_state.vi.vertexStrides[binding] != stride)) {
|
||||
m_state.vi.vertexStrides[binding] = stride;
|
||||
m_flags.set(DxvkContextFlag::GpDirtyPipelineState);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Binds transform feedback buffer
|
||||
@ -190,7 +254,15 @@ namespace dxvk {
|
||||
void bindXfbBuffer(
|
||||
uint32_t binding,
|
||||
const DxvkBufferSlice& buffer,
|
||||
const DxvkBufferSlice& counter);
|
||||
const DxvkBufferSlice& counter) {
|
||||
if (!m_state.xfb.buffers [binding].matches(buffer)
|
||||
|| !m_state.xfb.counters[binding].matches(counter)) {
|
||||
m_state.xfb.buffers [binding] = buffer;
|
||||
m_state.xfb.counters[binding] = counter;
|
||||
|
||||
m_flags.set(DxvkContextFlag::GpDirtyXfbBuffers);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Blits an image
|
||||
|
Loading…
x
Reference in New Issue
Block a user