--- src/intel/vulkan/anv_pipeline.c | 8 ++++++++ src/intel/vulkan/anv_private.h | 1 + src/intel/vulkan/genX_cmd_buffer.c | 7 +------ src/intel/vulkan/genX_pipeline.c | 8 ++------ 4 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c index 1f9afb50894..d175275350e 100644 --- a/src/intel/vulkan/anv_pipeline.c +++ b/src/intel/vulkan/anv_pipeline.c @@ -1420,6 +1420,14 @@ anv_pipeline_init(struct anv_pipeline *pipeline, pipeline->vb[desc->binding].instanced = true; break; } + + /* Our implementation of VK_KHR_multiview uses instancing to draw the + * different views. If the client asks for instancing, we need to use + * the Instance Data Step Rate to ensure that we repeat the client's + * per-instance data once for each view. + */ + pipeline->vb[desc->binding].instance_divisor = + anv_subpass_view_count(pipeline->subpass); } const VkPipelineInputAssemblyStateCreateInfo *ia_info = diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 0620d6f96e1..50583279621 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -2386,6 +2386,7 @@ struct anv_pipeline { struct anv_pipeline_vertex_binding { uint32_t stride; bool instanced; + uint32_t instance_divisor; } vb[MAX_VBS]; bool primitive_restart; diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 426299d5c8d..6ea6a2ba901 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -2518,12 +2518,7 @@ genX(cmd_buffer_flush_state)(struct anv_cmd_buffer *cmd_buffer) .MemoryObjectControlState = GENX(MOCS), #else .BufferAccessType = pipeline->vb[vb].instanced ? INSTANCEDATA : VERTEXDATA, - /* Our implementation of VK_KHR_multiview uses instancing to draw - * the different views. If the client asks for instancing, we - * need to use the Instance Data Step Rate to ensure that we - * repeat the client's per-instance data once for each view. - */ - .InstanceDataStepRate = anv_subpass_view_count(pipeline->subpass), + .InstanceDataStepRate = pipeline->vb[vb].instance_divisor, .VertexBufferMemoryObjectControlState = GENX(MOCS), #endif diff --git a/src/intel/vulkan/genX_pipeline.c b/src/intel/vulkan/genX_pipeline.c index c38dbe206f4..738f0374d40 100644 --- a/src/intel/vulkan/genX_pipeline.c +++ b/src/intel/vulkan/genX_pipeline.c @@ -156,12 +156,8 @@ emit_vertex_input(struct anv_pipeline *pipeline, anv_batch_emit(&pipeline->batch, GENX(3DSTATE_VF_INSTANCING), vfi) { vfi.InstancingEnable = pipeline->vb[desc->binding].instanced; vfi.VertexElementIndex = slot; - /* Our implementation of VK_KHR_multiview uses instancing to draw - * the different views. If the client asks for instancing, we - * need to use the Instance Data Step Rate to ensure that we - * repeat the client's per-instance data once for each view. - */ - vfi.InstanceDataStepRate = anv_subpass_view_count(pipeline->subpass); + vfi.InstanceDataStepRate = + pipeline->vb[desc->binding].instance_divisor; } #endif } -- 2.17.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev