mirror of
https://github.com/doitsujin/dxvk.git
synced 2024-12-14 00:48:44 +01:00
[dxvk] Make shader stage parameter in bindShader a template parameter
This commit is contained in:
parent
29a2cb9a5e
commit
2e6a2f1be3
@ -3125,7 +3125,7 @@ namespace dxvk {
|
||||
uint32_t slotId = computeConstantBufferBinding(ShaderStage,
|
||||
D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT);
|
||||
|
||||
ctx->bindShader(stage,
|
||||
ctx->bindShader<stage>(
|
||||
Forwarder::move(cShader));
|
||||
ctx->bindResourceBuffer(stage, slotId,
|
||||
Forwarder::move(cSlice));
|
||||
@ -3911,6 +3911,14 @@ namespace dxvk {
|
||||
for (uint32_t i = 0; i < cUsedBindings.soCount; i++)
|
||||
ctx->bindXfbBuffer(i, DxvkBufferSlice(), DxvkBufferSlice());
|
||||
|
||||
// Unbind all shaders
|
||||
ctx->bindShader<VK_SHADER_STAGE_VERTEX_BIT>(nullptr);
|
||||
ctx->bindShader<VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT>(nullptr);
|
||||
ctx->bindShader<VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT>(nullptr);
|
||||
ctx->bindShader<VK_SHADER_STAGE_GEOMETRY_BIT>(nullptr);
|
||||
ctx->bindShader<VK_SHADER_STAGE_FRAGMENT_BIT>(nullptr);
|
||||
ctx->bindShader<VK_SHADER_STAGE_COMPUTE_BIT>(nullptr);
|
||||
|
||||
// Unbind per-shader stage resources
|
||||
for (uint32_t i = 0; i < 6; i++) {
|
||||
auto programType = DxbcProgramType(i);
|
||||
@ -3918,8 +3926,6 @@ namespace dxvk {
|
||||
|
||||
// Unbind constant buffers, including the shader's ICB
|
||||
auto cbSlotId = computeConstantBufferBinding(programType, 0);
|
||||
|
||||
ctx->bindShader(stage, nullptr);
|
||||
ctx->bindResourceBuffer(stage, cbSlotId + D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT, DxvkBufferSlice());
|
||||
|
||||
for (uint32_t j = 0; j < cUsedBindings.stages[i].cbvCount; j++)
|
||||
|
@ -1199,8 +1199,8 @@ namespace dxvk {
|
||||
rt.color[0].layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
|
||||
|
||||
ctx->bindRenderTargets(std::move(rt), 0u);
|
||||
ctx->bindShader(VK_SHADER_STAGE_VERTEX_BIT, Rc<DxvkShader>(m_vs));
|
||||
ctx->bindShader(VK_SHADER_STAGE_FRAGMENT_BIT, Rc<DxvkShader>(m_fs));
|
||||
ctx->bindShader<VK_SHADER_STAGE_VERTEX_BIT>(Rc<DxvkShader>(m_vs));
|
||||
ctx->bindShader<VK_SHADER_STAGE_FRAGMENT_BIT>(Rc<DxvkShader>(m_fs));
|
||||
ctx->bindResourceBuffer(VK_SHADER_STAGE_FRAGMENT_BIT, 0, DxvkBufferSlice(m_ubo));
|
||||
|
||||
DxvkInputAssemblyState iaState;
|
||||
@ -1314,8 +1314,8 @@ namespace dxvk {
|
||||
m_ctx->EmitCs([this] (DxvkContext* ctx) {
|
||||
ctx->bindRenderTargets(DxvkRenderTargets(), 0u);
|
||||
|
||||
ctx->bindShader(VK_SHADER_STAGE_VERTEX_BIT, nullptr);
|
||||
ctx->bindShader(VK_SHADER_STAGE_FRAGMENT_BIT, nullptr);
|
||||
ctx->bindShader<VK_SHADER_STAGE_VERTEX_BIT>(nullptr);
|
||||
ctx->bindShader<VK_SHADER_STAGE_FRAGMENT_BIT>(nullptr);
|
||||
|
||||
ctx->bindResourceBuffer(VK_SHADER_STAGE_FRAGMENT_BIT, 0, DxvkBufferSlice());
|
||||
});
|
||||
|
@ -2668,15 +2668,15 @@ namespace dxvk {
|
||||
|
||||
// Unbind the pixel shader, we aren't drawing
|
||||
// to avoid val errors / UB.
|
||||
ctx->bindShader(VK_SHADER_STAGE_FRAGMENT_BIT, nullptr);
|
||||
ctx->bindShader<VK_SHADER_STAGE_FRAGMENT_BIT>(nullptr);
|
||||
|
||||
ctx->bindShader(VK_SHADER_STAGE_GEOMETRY_BIT, std::move(shader));
|
||||
ctx->bindShader<VK_SHADER_STAGE_GEOMETRY_BIT>(std::move(shader));
|
||||
ctx->bindResourceBuffer(VK_SHADER_STAGE_GEOMETRY_BIT, getSWVPBufferSlot(), std::move(cBufferSlice));
|
||||
ctx->draw(
|
||||
drawInfo.vertexCount, drawInfo.instanceCount,
|
||||
cStartIndex, 0);
|
||||
ctx->bindResourceBuffer(VK_SHADER_STAGE_GEOMETRY_BIT, getSWVPBufferSlot(), DxvkBufferSlice());
|
||||
ctx->bindShader(VK_SHADER_STAGE_GEOMETRY_BIT, nullptr);
|
||||
ctx->bindShader<VK_SHADER_STAGE_GEOMETRY_BIT>(nullptr);
|
||||
});
|
||||
|
||||
// We unbound the pixel shader before,
|
||||
@ -6131,7 +6131,7 @@ namespace dxvk {
|
||||
cShader = pShaderModule->GetShader(Permutation)
|
||||
] (DxvkContext* ctx) mutable {
|
||||
constexpr VkShaderStageFlagBits stage = GetShaderStage(ShaderStage);
|
||||
ctx->bindShader(stage, std::move(cShader));
|
||||
ctx->bindShader<stage>(std::move(cShader));
|
||||
});
|
||||
}
|
||||
|
||||
@ -6504,7 +6504,7 @@ namespace dxvk {
|
||||
&cShaders = m_ffModules
|
||||
](DxvkContext* ctx) {
|
||||
auto shader = cShaders.GetShaderModule(this, cKey);
|
||||
ctx->bindShader(VK_SHADER_STAGE_VERTEX_BIT, shader.GetShader());
|
||||
ctx->bindShader<VK_SHADER_STAGE_VERTEX_BIT>(shader.GetShader());
|
||||
});
|
||||
}
|
||||
|
||||
@ -6679,7 +6679,7 @@ namespace dxvk {
|
||||
&cShaders = m_ffModules
|
||||
](DxvkContext* ctx) {
|
||||
auto shader = cShaders.GetShaderModule(this, cKey);
|
||||
ctx->bindShader(VK_SHADER_STAGE_FRAGMENT_BIT, shader.GetShader());
|
||||
ctx->bindShader<VK_SHADER_STAGE_FRAGMENT_BIT>(shader.GetShader());
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -96,7 +96,7 @@ namespace dxvk {
|
||||
m_context->setSpecConstant(VK_PIPELINE_BIND_POINT_COMPUTE, 0, specConstantValue);
|
||||
m_context->bindResourceImageView(VK_SHADER_STAGE_COMPUTE_BIT, BindingIds::Image, std::move(tmpImageView));
|
||||
m_context->bindResourceBufferView(VK_SHADER_STAGE_COMPUTE_BIT, BindingIds::Buffer, std::move(tmpBufferView));
|
||||
m_context->bindShader(VK_SHADER_STAGE_COMPUTE_BIT, Rc<DxvkShader>(m_shaders[videoFormat.FormatType]));
|
||||
m_context->bindShader<VK_SHADER_STAGE_COMPUTE_BIT>(Rc<DxvkShader>(m_shaders[videoFormat.FormatType]));
|
||||
m_context->pushConstants(0, sizeof(VkExtent2D), &imageExtent);
|
||||
m_context->dispatch(
|
||||
(imageExtent.width / 8) + (imageExtent.width % 8),
|
||||
|
@ -261,10 +261,10 @@ namespace dxvk {
|
||||
* \param [in] stage Target shader stage
|
||||
* \param [in] shader The shader to bind
|
||||
*/
|
||||
template<VkShaderStageFlagBits Stage>
|
||||
void bindShader(
|
||||
VkShaderStageFlagBits stage,
|
||||
Rc<DxvkShader>&& shader) {
|
||||
switch (stage) {
|
||||
switch (Stage) {
|
||||
case VK_SHADER_STAGE_VERTEX_BIT:
|
||||
m_state.gp.shaders.vs = std::move(shader);
|
||||
break;
|
||||
@ -293,7 +293,7 @@ namespace dxvk {
|
||||
return;
|
||||
}
|
||||
|
||||
if (stage == VK_SHADER_STAGE_COMPUTE_BIT) {
|
||||
if (Stage == VK_SHADER_STAGE_COMPUTE_BIT) {
|
||||
m_flags.set(
|
||||
DxvkContextFlag::CpDirtyPipelineState);
|
||||
} else {
|
||||
|
@ -197,8 +197,8 @@ namespace dxvk {
|
||||
ctx->bindResourceImageView(VK_SHADER_STAGE_FRAGMENT_BIT, BindingIds::Image, Rc<DxvkImageView>(srcView));
|
||||
ctx->bindResourceImageView(VK_SHADER_STAGE_FRAGMENT_BIT, BindingIds::Gamma, Rc<DxvkImageView>(m_gammaView));
|
||||
|
||||
ctx->bindShader(VK_SHADER_STAGE_VERTEX_BIT, Rc<DxvkShader>(m_vs));
|
||||
ctx->bindShader(VK_SHADER_STAGE_FRAGMENT_BIT, Rc<DxvkShader>(fs));
|
||||
ctx->bindShader<VK_SHADER_STAGE_VERTEX_BIT>(Rc<DxvkShader>(m_vs));
|
||||
ctx->bindShader<VK_SHADER_STAGE_FRAGMENT_BIT>(Rc<DxvkShader>(fs));
|
||||
|
||||
PresenterArgs args;
|
||||
args.srcOffset = srcRect.offset;
|
||||
|
@ -104,8 +104,8 @@ namespace dxvk::hud {
|
||||
if (m_mode != Mode::RenderText) {
|
||||
m_mode = Mode::RenderText;
|
||||
|
||||
m_context->bindShader(VK_SHADER_STAGE_VERTEX_BIT, Rc<DxvkShader>(m_textShaders.vert));
|
||||
m_context->bindShader(VK_SHADER_STAGE_FRAGMENT_BIT, Rc<DxvkShader>(m_textShaders.frag));
|
||||
m_context->bindShader<VK_SHADER_STAGE_VERTEX_BIT>(Rc<DxvkShader>(m_textShaders.vert));
|
||||
m_context->bindShader<VK_SHADER_STAGE_FRAGMENT_BIT>(Rc<DxvkShader>(m_textShaders.frag));
|
||||
|
||||
m_context->bindResourceBuffer(VK_SHADER_STAGE_VERTEX_BIT, 0, DxvkBufferSlice(m_fontBuffer));
|
||||
m_context->bindResourceBufferView(VK_SHADER_STAGE_VERTEX_BIT, 1, Rc<DxvkBufferView>(m_dataView));
|
||||
@ -126,8 +126,8 @@ namespace dxvk::hud {
|
||||
if (m_mode != Mode::RenderGraph) {
|
||||
m_mode = Mode::RenderGraph;
|
||||
|
||||
m_context->bindShader(VK_SHADER_STAGE_VERTEX_BIT, Rc<DxvkShader>(m_graphShaders.vert));
|
||||
m_context->bindShader(VK_SHADER_STAGE_FRAGMENT_BIT, Rc<DxvkShader>(m_graphShaders.frag));
|
||||
m_context->bindShader<VK_SHADER_STAGE_VERTEX_BIT>(Rc<DxvkShader>(m_graphShaders.vert));
|
||||
m_context->bindShader<VK_SHADER_STAGE_FRAGMENT_BIT>(Rc<DxvkShader>(m_graphShaders.frag));
|
||||
|
||||
m_context->bindResourceBuffer(VK_SHADER_STAGE_FRAGMENT_BIT, 0, DxvkBufferSlice(m_dataBuffer));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user