Allowing setting dynamic and non-dynamic sample locations on Gen7. --- src/intel/vulkan/anv_genX.h | 13 ++--- src/intel/vulkan/genX_cmd_buffer.c | 9 ++-- src/intel/vulkan/genX_pipeline.c | 13 +---- src/intel/vulkan/genX_state.c | 86 +++++++++++++++++++++--------- 4 files changed, 70 insertions(+), 51 deletions(-)
diff --git a/src/intel/vulkan/anv_genX.h b/src/intel/vulkan/anv_genX.h index f84fe457152..e82d83465ef 100644 --- a/src/intel/vulkan/anv_genX.h +++ b/src/intel/vulkan/anv_genX.h @@ -89,11 +89,8 @@ void genX(cmd_buffer_mi_memset)(struct anv_cmd_buffer *cmd_buffer, void genX(blorp_exec)(struct blorp_batch *batch, const struct blorp_params *params); -void genX(emit_multisample)(struct anv_batch *batch, - uint32_t samples, - uint32_t log2_samples); - -void genX(emit_sample_locations)(struct anv_batch *batch, - const struct anv_sample *anv_samples, - uint32_t num_samples, - bool custom_locations); +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); diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 9229df84caa..4752c66f350 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -2643,8 +2643,7 @@ cmd_buffer_flush_push_constants(struct anv_cmd_buffer *cmd_buffer, static void cmd_buffer_emit_sample_locations(struct anv_cmd_buffer *cmd_buffer) { -#if GEN_GEN >= 8 - const struct anv_sample *anv_samples; + struct anv_sample *anv_samples; uint32_t log2_samples; uint32_t samples; @@ -2654,10 +2653,8 @@ cmd_buffer_emit_sample_locations(struct anv_cmd_buffer *cmd_buffer) log2_samples = __builtin_ffs(samples) - 1; anv_samples = cmd_buffer->state.gfx.dynamic.sample_locations.anv_samples; - genX(emit_multisample)(&cmd_buffer->batch, samples, log2_samples); - genX(emit_sample_locations)(&cmd_buffer->batch, anv_samples, samples, - true); -#endif + genX(emit_ms_state)(&cmd_buffer->batch, anv_samples, samples, + log2_samples, true); } void diff --git a/src/intel/vulkan/genX_pipeline.c b/src/intel/vulkan/genX_pipeline.c index fa42e622077..8afc08f0320 100644 --- a/src/intel/vulkan/genX_pipeline.c +++ b/src/intel/vulkan/genX_pipeline.c @@ -577,12 +577,9 @@ emit_ms_state(struct anv_pipeline *pipeline, const VkPipelineMultisampleStateCreateInfo *info, const VkPipelineDynamicStateCreateInfo *dinfo) { -#if GEN_GEN >= 8 struct anv_sample anv_samples[MAX_SAMPLE_LOCATIONS]; VkSampleLocationsInfoEXT *sl; bool custom_locations = false; -#endif - uint32_t samples = 1; uint32_t log2_samples = 0; @@ -591,7 +588,6 @@ emit_ms_state(struct anv_pipeline *pipeline, if (info) { samples = info->rasterizationSamples; -#if GEN_GEN >= 8 if (info->pNext) { VkPipelineSampleLocationsStateCreateInfoEXT *slinfo = (VkPipelineSampleLocationsStateCreateInfoEXT *)info->pNext; @@ -616,17 +612,12 @@ emit_ms_state(struct anv_pipeline *pipeline, } } } -#endif log2_samples = __builtin_ffs(samples) - 1; } - genX(emit_multisample(&pipeline->batch, samples, log2_samples)); - -#if GEN_GEN >= 8 - genX(emit_sample_locations)(&pipeline->batch, anv_samples, samples, - custom_locations); -#endif + genX(emit_ms_state)(&pipeline->batch, anv_samples, samples, log2_samples, + custom_locations); } static const uint32_t vk_to_gen_logic_op[] = { diff --git a/src/intel/vulkan/genX_state.c b/src/intel/vulkan/genX_state.c index 44cfc925ed5..804cfab3a56 100644 --- a/src/intel/vulkan/genX_state.c +++ b/src/intel/vulkan/genX_state.c @@ -437,10 +437,12 @@ VkResult genX(CreateSampler)( return VK_SUCCESS; } -void -genX(emit_multisample)(struct anv_batch *batch, - uint32_t samples, - uint32_t log2_samples) +static void +emit_multisample(struct anv_batch *batch, + const struct anv_sample *anv_samples, + uint32_t samples, + uint32_t log2_samples, + bool custom_locations) { anv_batch_emit(batch, GENX(3DSTATE_MULTISAMPLE), ms) { ms.NumberofMultisamples = log2_samples; @@ -453,34 +455,52 @@ genX(emit_multisample)(struct anv_batch *batch, */ ms.PixelPositionOffsetEnable = false; #else - switch (samples) { - case 1: - GEN_SAMPLE_POS_1X(ms.Sample); - break; - case 2: - GEN_SAMPLE_POS_2X(ms.Sample); - break; - case 4: - GEN_SAMPLE_POS_4X(ms.Sample); - break; - case 8: - GEN_SAMPLE_POS_8X(ms.Sample); - break; - default: - break; + if (custom_locations) { + switch (samples) { + case 1: + SET_SAMPLE_POS(ms.Sample, 0); + break; + case 2: + SET_SAMPLE_POS_2X(ms.Sample); + break; + case 4: + SET_SAMPLE_POS_4X(ms.Sample); + break; + case 8: + SET_SAMPLE_POS_8X(ms.Sample); + break; + default: + break; + } + } else { + switch (samples) { + case 1: + GEN_SAMPLE_POS_1X(ms.Sample); + break; + case 2: + GEN_SAMPLE_POS_2X(ms.Sample); + break; + case 4: + GEN_SAMPLE_POS_4X(ms.Sample); + break; + case 8: + GEN_SAMPLE_POS_8X(ms.Sample); + break; + default: + break; + } } #endif } } -void -genX(emit_sample_locations)(struct anv_batch *batch, - const struct anv_sample *anv_samples, - uint32_t num_samples, - bool custom_locations) -{ #if GEN_GEN >= 8 - +static void +emit_sample_locations(struct anv_batch *batch, + const struct anv_sample *anv_samples, + uint32_t num_samples, + bool custom_locations) +{ #if GEN_GEN == 10 gen10_emit_wa_cs_stall_flush(batch); #endif @@ -524,6 +544,20 @@ genX(emit_sample_locations)(struct anv_batch *batch, #if GEN_GEN == 10 gen10_emit_wa_lri_to_cache_mode_zero(batch); #endif +} +#endif +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) +{ + 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); #endif } -- 2.20.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev