We only emit sample locations when the extension is enabled by the user. In all other cases the default locations are emitted once when the device is initialized to increase performance. --- src/intel/vulkan/anv_genX.h | 3 ++- src/intel/vulkan/genX_cmd_buffer.c | 2 +- src/intel/vulkan/genX_pipeline.c | 11 +++++++---- src/intel/vulkan/genX_state.c | 8 +++++--- 4 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/src/intel/vulkan/anv_genX.h b/src/intel/vulkan/anv_genX.h index e82d83465ef..7f33a2b0a68 100644 --- a/src/intel/vulkan/anv_genX.h +++ b/src/intel/vulkan/anv_genX.h @@ -93,4 +93,5 @@ void genX(emit_ms_state)(struct anv_batch *batch, struct anv_sample *anv_samples, uint32_t num_samples, uint32_t log2_samples, - bool custom_sample_locations); + bool custom_sample_locations, + bool sample_locations_ext_enabled); diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 4752c66f350..ae7c5a80a3c 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -2654,7 +2654,7 @@ cmd_buffer_emit_sample_locations(struct anv_cmd_buffer *cmd_buffer) anv_samples = cmd_buffer->state.gfx.dynamic.sample_locations.anv_samples; genX(emit_ms_state)(&cmd_buffer->batch, anv_samples, samples, - log2_samples, true); + log2_samples, true, true); } void diff --git a/src/intel/vulkan/genX_pipeline.c b/src/intel/vulkan/genX_pipeline.c index 8afc08f0320..12adfa65da8 100644 --- a/src/intel/vulkan/genX_pipeline.c +++ b/src/intel/vulkan/genX_pipeline.c @@ -573,10 +573,12 @@ emit_sample_mask(struct anv_pipeline *pipeline, } static void -emit_ms_state(struct anv_pipeline *pipeline, +emit_ms_state(struct anv_device *device, + struct anv_pipeline *pipeline, const VkPipelineMultisampleStateCreateInfo *info, const VkPipelineDynamicStateCreateInfo *dinfo) { + bool sample_loc_enabled = device->enabled_extensions.EXT_sample_locations; struct anv_sample anv_samples[MAX_SAMPLE_LOCATIONS]; VkSampleLocationsInfoEXT *sl; bool custom_locations = false; @@ -588,7 +590,7 @@ emit_ms_state(struct anv_pipeline *pipeline, if (info) { samples = info->rasterizationSamples; - if (info->pNext) { + if (sample_loc_enabled && info->pNext) { VkPipelineSampleLocationsStateCreateInfoEXT *slinfo = (VkPipelineSampleLocationsStateCreateInfoEXT *)info->pNext; @@ -617,7 +619,7 @@ emit_ms_state(struct anv_pipeline *pipeline, } genX(emit_ms_state)(&pipeline->batch, anv_samples, samples, log2_samples, - custom_locations); + custom_locations, sample_loc_enabled); } static const uint32_t vk_to_gen_logic_op[] = { @@ -1947,7 +1949,8 @@ genX(graphics_pipeline_create)( assert(pCreateInfo->pRasterizationState); emit_rs_state(pipeline, pCreateInfo->pRasterizationState, pCreateInfo->pMultisampleState, pass, subpass); - emit_ms_state(pipeline, pCreateInfo->pMultisampleState, pCreateInfo->pDynamicState); + emit_ms_state(device, pipeline, pCreateInfo->pMultisampleState, + pCreateInfo->pDynamicState); emit_ds_state(pipeline, pCreateInfo->pDepthStencilState, pass, subpass); emit_cb_state(pipeline, pCreateInfo->pColorBlendState, pCreateInfo->pMultisampleState); diff --git a/src/intel/vulkan/genX_state.c b/src/intel/vulkan/genX_state.c index 804cfab3a56..bc6b5870d8d 100644 --- a/src/intel/vulkan/genX_state.c +++ b/src/intel/vulkan/genX_state.c @@ -552,12 +552,14 @@ genX(emit_ms_state)(struct anv_batch *batch, struct anv_sample *anv_samples, uint32_t num_samples, uint32_t log2_samples, - bool custom_sample_locations) + bool custom_sample_locations, + bool sample_locations_ext_enabled) { emit_multisample(batch, anv_samples, num_samples, log2_samples, custom_sample_locations); #if GEN_GEN >= 8 - emit_sample_locations(batch, anv_samples, num_samples, - custom_sample_locations); + if (sample_locations_ext_enabled) + emit_sample_locations(batch, anv_samples, num_samples, + custom_sample_locations); #endif } -- 2.20.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev