[Mesa-dev] [PATCH 20/22] anv: Get rid of graphics_pipeline_create_info_extra
Pohjolainen, Topi
topi.pohjolainen at gmail.com
Wed Oct 12 09:48:23 UTC 2016
On Fri, Oct 07, 2016 at 09:41:18PM -0700, Jason Ekstrand wrote:
> Now that we no longer have meta, all pipelines get created via the normal
> Vulkan pipeline creation mechanics. There is no more need for this bit of
> extra magic data that we've been passing around.
>
> Signed-off-by: Jason Ekstrand <jason at jlekstrand.net>
> ---
> src/intel/vulkan/anv_genX.h | 1 -
> src/intel/vulkan/anv_pipeline.c | 55 ++++++++---------------------------
> src/intel/vulkan/anv_private.h | 15 ----------
> src/intel/vulkan/gen7_pipeline.c | 13 ++++-----
> src/intel/vulkan/gen8_pipeline.c | 16 +++++-----
> src/intel/vulkan/genX_pipeline.c | 2 --
> src/intel/vulkan/genX_pipeline_util.h | 34 +++++++---------------
> 7 files changed, 35 insertions(+), 101 deletions(-)
>
> diff --git a/src/intel/vulkan/anv_genX.h b/src/intel/vulkan/anv_genX.h
> index 81ebbaa..b862c06 100644
> --- a/src/intel/vulkan/anv_genX.h
> +++ b/src/intel/vulkan/anv_genX.h
> @@ -62,7 +62,6 @@ VkResult
> genX(graphics_pipeline_create)(VkDevice _device,
> struct anv_pipeline_cache *cache,
> const VkGraphicsPipelineCreateInfo *pCreateInfo,
> - const struct anv_graphics_pipeline_create_info *extra,
> const VkAllocationCallbacks *alloc,
> VkPipeline *pPipeline);
>
> diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c
> index e835b14..4b5c603 100644
> --- a/src/intel/vulkan/anv_pipeline.c
> +++ b/src/intel/vulkan/anv_pipeline.c
> @@ -267,7 +267,6 @@ populate_gs_prog_key(const struct gen_device_info *devinfo,
> static void
> populate_wm_prog_key(const struct gen_device_info *devinfo,
> const VkGraphicsPipelineCreateInfo *info,
> - const struct anv_graphics_pipeline_create_info *extra,
> struct brw_wm_prog_key *key)
> {
> ANV_FROM_HANDLE(anv_render_pass, render_pass, info->renderPass);
> @@ -284,12 +283,8 @@ populate_wm_prog_key(const struct gen_device_info *devinfo,
> /* XXX Vulkan doesn't appear to specify */
> key->clamp_fragment_color = false;
>
> - if (extra && extra->color_attachment_count >= 0) {
> - key->nr_color_regions = extra->color_attachment_count;
> - } else {
> - key->nr_color_regions =
> - render_pass->subpasses[info->subpass].color_count;
> - }
> + key->nr_color_regions =
> + render_pass->subpasses[info->subpass].color_count;
>
> key->replicate_alpha = key->nr_color_regions > 1 &&
> info->pMultisampleState &&
> @@ -605,7 +600,6 @@ static VkResult
> anv_pipeline_compile_fs(struct anv_pipeline *pipeline,
> struct anv_pipeline_cache *cache,
> const VkGraphicsPipelineCreateInfo *info,
> - const struct anv_graphics_pipeline_create_info *extra,
> struct anv_shader_module *module,
> const char *entrypoint,
> const VkSpecializationInfo *spec_info)
> @@ -617,7 +611,7 @@ anv_pipeline_compile_fs(struct anv_pipeline *pipeline,
> struct anv_shader_bin *bin = NULL;
> unsigned char sha1[20];
>
> - populate_wm_prog_key(&pipeline->device->info, info, extra, &key);
> + populate_wm_prog_key(&pipeline->device->info, info, &key);
>
> if (cache) {
> anv_hash_shader(sha1, &key, sizeof(key), module, entrypoint,
> @@ -675,11 +669,6 @@ anv_pipeline_compile_fs(struct anv_pipeline *pipeline,
> num_rts += array_len;
> }
>
> - if (pipeline->use_repclear) {
> - assert(num_rts == 1);
> - key.nr_color_regions = 1;
> - }
> -
> if (num_rts == 0) {
> /* If we have no render targets, we need a null render target */
> rt_bindings[0] = (struct anv_pipeline_binding) {
> @@ -707,8 +696,7 @@ anv_pipeline_compile_fs(struct anv_pipeline *pipeline,
> unsigned code_size;
> const unsigned *shader_code =
> brw_compile_fs(compiler, NULL, mem_ctx, &key, &prog_data, nir,
> - NULL, -1, -1, true, pipeline->use_repclear,
> - &code_size, NULL);
> + NULL, -1, -1, true, false, &code_size, NULL);
> if (shader_code == NULL) {
> ralloc_free(mem_ctx);
> return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
> @@ -1013,7 +1001,6 @@ anv_pipeline_init(struct anv_pipeline *pipeline,
> struct anv_device *device,
> struct anv_pipeline_cache *cache,
> const VkGraphicsPipelineCreateInfo *pCreateInfo,
> - const struct anv_graphics_pipeline_create_info *extra,
> const VkAllocationCallbacks *alloc)
> {
> VkResult result;
> @@ -1041,8 +1028,6 @@ anv_pipeline_init(struct anv_pipeline *pipeline,
> pipeline->depth_clamp_enable = pCreateInfo->pRasterizationState &&
> pCreateInfo->pRasterizationState->depthClampEnable;
>
> - pipeline->use_repclear = extra && extra->use_repclear;
> -
> pipeline->needs_data_cache = false;
>
> /* When we free the pipeline, we detect stages based on the NULL status
> @@ -1087,7 +1072,7 @@ anv_pipeline_init(struct anv_pipeline *pipeline,
> }
>
> if (modules[MESA_SHADER_FRAGMENT]) {
> - result = anv_pipeline_compile_fs(pipeline, cache, pCreateInfo, extra,
> + result = anv_pipeline_compile_fs(pipeline, cache, pCreateInfo,
> modules[MESA_SHADER_FRAGMENT],
> pStages[MESA_SHADER_FRAGMENT]->pName,
> pStages[MESA_SHADER_FRAGMENT]->pSpecializationInfo);
> @@ -1095,26 +1080,14 @@ anv_pipeline_init(struct anv_pipeline *pipeline,
> goto compile_fail;
> }
>
> - if (!(pipeline->active_stages & VK_SHADER_STAGE_VERTEX_BIT)) {
> - /* Vertex is only optional if disable_vs is set */
> - assert(extra->disable_vs);
> - }
> + assert(pipeline->active_stages & VK_SHADER_STAGE_VERTEX_BIT);
>
> anv_pipeline_setup_l3_config(pipeline, false);
>
> const VkPipelineVertexInputStateCreateInfo *vi_info =
> pCreateInfo->pVertexInputState;
>
> - uint64_t inputs_read;
> - if (extra && extra->disable_vs) {
> - /* If the VS is disabled, just assume the user knows what they're
> - * doing and apply the layout blindly. This can only come from
> - * meta, so this *should* be safe.
> - */
> - inputs_read = ~0ull;
> - } else {
> - inputs_read = get_vs_prog_data(pipeline)->inputs_read;
> - }
> + const uint64_t inputs_read= get_vs_prog_data(pipeline)->inputs_read;
Missing space before '='.
Patches 19 and 20 are:
Reviewed-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
>
> pipeline->vb_used = 0;
> for (uint32_t i = 0; i < vi_info->vertexAttributeDescriptionCount; i++) {
> @@ -1150,9 +1123,6 @@ anv_pipeline_init(struct anv_pipeline *pipeline,
> pipeline->primitive_restart = ia_info->primitiveRestartEnable;
> pipeline->topology = vk_to_gen_primitive_type[ia_info->topology];
>
> - if (extra && extra->use_rectlist)
> - pipeline->topology = _3DPRIM_RECTLIST;
> -
> return VK_SUCCESS;
>
> compile_fail:
> @@ -1171,7 +1141,6 @@ anv_graphics_pipeline_create(
> VkDevice _device,
> VkPipelineCache _cache,
> const VkGraphicsPipelineCreateInfo *pCreateInfo,
> - const struct anv_graphics_pipeline_create_info *extra,
> const VkAllocationCallbacks *pAllocator,
> VkPipeline *pPipeline)
> {
> @@ -1181,13 +1150,13 @@ anv_graphics_pipeline_create(
> switch (device->info.gen) {
> case 7:
> if (device->info.is_haswell)
> - return gen75_graphics_pipeline_create(_device, cache, pCreateInfo, extra, pAllocator, pPipeline);
> + return gen75_graphics_pipeline_create(_device, cache, pCreateInfo, pAllocator, pPipeline);
> else
> - return gen7_graphics_pipeline_create(_device, cache, pCreateInfo, extra, pAllocator, pPipeline);
> + return gen7_graphics_pipeline_create(_device, cache, pCreateInfo, pAllocator, pPipeline);
> case 8:
> - return gen8_graphics_pipeline_create(_device, cache, pCreateInfo, extra, pAllocator, pPipeline);
> + return gen8_graphics_pipeline_create(_device, cache, pCreateInfo, pAllocator, pPipeline);
> case 9:
> - return gen9_graphics_pipeline_create(_device, cache, pCreateInfo, extra, pAllocator, pPipeline);
> + return gen9_graphics_pipeline_create(_device, cache, pCreateInfo, pAllocator, pPipeline);
> default:
> unreachable("unsupported gen\n");
> }
> @@ -1208,7 +1177,7 @@ VkResult anv_CreateGraphicsPipelines(
> result = anv_graphics_pipeline_create(_device,
> pipelineCache,
> &pCreateInfos[i],
> - NULL, pAllocator, &pPipelines[i]);
> + pAllocator, &pPipelines[i]);
> if (result != VK_SUCCESS) {
> for (unsigned j = 0; j < i; j++) {
> anv_DestroyPipeline(_device, pPipelines[j], pAllocator);
> diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
> index 1322e92..3ddf0ba 100644
> --- a/src/intel/vulkan/anv_private.h
> +++ b/src/intel/vulkan/anv_private.h
> @@ -1457,7 +1457,6 @@ struct anv_pipeline {
>
> struct anv_pipeline_layout * layout;
>
> - bool use_repclear;
> bool needs_data_cache;
>
> struct anv_shader_bin * shaders[MESA_SHADER_STAGES];
> @@ -1525,23 +1524,10 @@ ANV_DECL_GET_PROG_DATA_FUNC(gs, MESA_SHADER_GEOMETRY)
> ANV_DECL_GET_PROG_DATA_FUNC(wm, MESA_SHADER_FRAGMENT)
> ANV_DECL_GET_PROG_DATA_FUNC(cs, MESA_SHADER_COMPUTE)
>
> -struct anv_graphics_pipeline_create_info {
> - /**
> - * If non-negative, overrides the color attachment count of the pipeline's
> - * subpass.
> - */
> - int8_t color_attachment_count;
> -
> - bool use_repclear;
> - bool disable_vs;
> - bool use_rectlist;
> -};
> -
> VkResult
> anv_pipeline_init(struct anv_pipeline *pipeline, struct anv_device *device,
> struct anv_pipeline_cache *cache,
> const VkGraphicsPipelineCreateInfo *pCreateInfo,
> - const struct anv_graphics_pipeline_create_info *extra,
> const VkAllocationCallbacks *alloc);
>
> VkResult
> @@ -1556,7 +1542,6 @@ VkResult
> anv_graphics_pipeline_create(VkDevice device,
> VkPipelineCache cache,
> const VkGraphicsPipelineCreateInfo *pCreateInfo,
> - const struct anv_graphics_pipeline_create_info *extra,
> const VkAllocationCallbacks *alloc,
> VkPipeline *pPipeline);
>
> diff --git a/src/intel/vulkan/gen7_pipeline.c b/src/intel/vulkan/gen7_pipeline.c
> index 82a467d..90ce3fb 100644
> --- a/src/intel/vulkan/gen7_pipeline.c
> +++ b/src/intel/vulkan/gen7_pipeline.c
> @@ -39,7 +39,6 @@ genX(graphics_pipeline_create)(
> VkDevice _device,
> struct anv_pipeline_cache * cache,
> const VkGraphicsPipelineCreateInfo* pCreateInfo,
> - const struct anv_graphics_pipeline_create_info *extra,
> const VkAllocationCallbacks* pAllocator,
> VkPipeline* pPipeline)
> {
> @@ -60,18 +59,18 @@ genX(graphics_pipeline_create)(
> return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
>
> result = anv_pipeline_init(pipeline, device, cache,
> - pCreateInfo, extra, pAllocator);
> + pCreateInfo, pAllocator);
> if (result != VK_SUCCESS) {
> anv_free2(&device->alloc, pAllocator, pipeline);
> return result;
> }
>
> assert(pCreateInfo->pVertexInputState);
> - emit_vertex_input(pipeline, pCreateInfo->pVertexInputState, extra);
> + emit_vertex_input(pipeline, pCreateInfo->pVertexInputState);
>
> assert(pCreateInfo->pRasterizationState);
> emit_rs_state(pipeline, pCreateInfo->pRasterizationState,
> - pCreateInfo->pMultisampleState, pass, subpass, extra);
> + pCreateInfo->pMultisampleState, pass, subpass);
>
> emit_ds_state(pipeline, pCreateInfo->pDepthStencilState, pass, subpass);
>
> @@ -81,7 +80,7 @@ genX(graphics_pipeline_create)(
> emit_urb_setup(pipeline);
>
> emit_3dstate_clip(pipeline, pCreateInfo->pViewportState,
> - pCreateInfo->pRasterizationState, extra);
> + pCreateInfo->pRasterizationState);
> emit_3dstate_streamout(pipeline, pCreateInfo->pRasterizationState);
>
> emit_ms_state(pipeline, pCreateInfo->pMultisampleState);
> @@ -107,7 +106,7 @@ genX(graphics_pipeline_create)(
> gen7_emit_vs_workaround_flush(brw);
> #endif
>
> - if (pipeline->vs_vec4 == NO_KERNEL || (extra && extra->disable_vs))
> + if (pipeline->vs_vec4 == NO_KERNEL)
> anv_batch_emit(&pipeline->batch, GENX(3DSTATE_VS), vs);
> else
> anv_batch_emit(&pipeline->batch, GENX(3DSTATE_VS), vs) {
> @@ -133,7 +132,7 @@ genX(graphics_pipeline_create)(
>
> const struct brw_gs_prog_data *gs_prog_data = get_gs_prog_data(pipeline);
>
> - if (pipeline->gs_kernel == NO_KERNEL || (extra && extra->disable_vs)) {
> + if (pipeline->gs_kernel == NO_KERNEL) {
> anv_batch_emit(&pipeline->batch, GENX(3DSTATE_GS), gs);
> } else {
> anv_batch_emit(&pipeline->batch, GENX(3DSTATE_GS), gs) {
> diff --git a/src/intel/vulkan/gen8_pipeline.c b/src/intel/vulkan/gen8_pipeline.c
> index 0fe9e70..28c0f89 100644
> --- a/src/intel/vulkan/gen8_pipeline.c
> +++ b/src/intel/vulkan/gen8_pipeline.c
> @@ -36,8 +36,7 @@
>
> static void
> emit_ia_state(struct anv_pipeline *pipeline,
> - const VkPipelineInputAssemblyStateCreateInfo *info,
> - const struct anv_graphics_pipeline_create_info *extra)
> + const VkPipelineInputAssemblyStateCreateInfo *info)
> {
> anv_batch_emit(&pipeline->batch, GENX(3DSTATE_VF_TOPOLOGY), vft) {
> vft.PrimitiveTopologyType = pipeline->topology;
> @@ -49,7 +48,6 @@ genX(graphics_pipeline_create)(
> VkDevice _device,
> struct anv_pipeline_cache * cache,
> const VkGraphicsPipelineCreateInfo* pCreateInfo,
> - const struct anv_graphics_pipeline_create_info *extra,
> const VkAllocationCallbacks* pAllocator,
> VkPipeline* pPipeline)
> {
> @@ -71,19 +69,19 @@ genX(graphics_pipeline_create)(
> return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
>
> result = anv_pipeline_init(pipeline, device, cache,
> - pCreateInfo, extra, pAllocator);
> + pCreateInfo, pAllocator);
> if (result != VK_SUCCESS) {
> anv_free2(&device->alloc, pAllocator, pipeline);
> return result;
> }
>
> assert(pCreateInfo->pVertexInputState);
> - emit_vertex_input(pipeline, pCreateInfo->pVertexInputState, extra);
> + emit_vertex_input(pipeline, pCreateInfo->pVertexInputState);
> assert(pCreateInfo->pInputAssemblyState);
> - emit_ia_state(pipeline, pCreateInfo->pInputAssemblyState, extra);
> + emit_ia_state(pipeline, pCreateInfo->pInputAssemblyState);
> assert(pCreateInfo->pRasterizationState);
> emit_rs_state(pipeline, pCreateInfo->pRasterizationState,
> - pCreateInfo->pMultisampleState, pass, subpass, extra);
> + pCreateInfo->pMultisampleState, pass, subpass);
> emit_ms_state(pipeline, pCreateInfo->pMultisampleState);
> emit_ds_state(pipeline, pCreateInfo->pDepthStencilState, pass, subpass);
> emit_cb_state(pipeline, pCreateInfo->pColorBlendState,
> @@ -92,7 +90,7 @@ genX(graphics_pipeline_create)(
> emit_urb_setup(pipeline);
>
> emit_3dstate_clip(pipeline, pCreateInfo->pViewportState,
> - pCreateInfo->pRasterizationState, extra);
> + pCreateInfo->pRasterizationState);
> emit_3dstate_streamout(pipeline, pCreateInfo->pRasterizationState);
>
> const struct brw_wm_prog_data *wm_prog_data = get_wm_prog_data(pipeline);
> @@ -179,7 +177,7 @@ genX(graphics_pipeline_create)(
> uint32_t vs_start = pipeline->vs_simd8 != NO_KERNEL ? pipeline->vs_simd8 :
> pipeline->vs_vec4;
>
> - if (vs_start == NO_KERNEL || (extra && extra->disable_vs)) {
> + if (vs_start == NO_KERNEL) {
> anv_batch_emit(&pipeline->batch, GENX(3DSTATE_VS), vs) {
> vs.FunctionEnable = false;
> /* Even if VS is disabled, SBE still gets the amount of
> diff --git a/src/intel/vulkan/genX_pipeline.c b/src/intel/vulkan/genX_pipeline.c
> index e5ad6ba..dce7c6a 100644
> --- a/src/intel/vulkan/genX_pipeline.c
> +++ b/src/intel/vulkan/genX_pipeline.c
> @@ -86,8 +86,6 @@ genX(compute_pipeline_create)(
> return result;
> }
>
> - pipeline->use_repclear = false;
> -
> const struct brw_cs_prog_data *cs_prog_data = get_cs_prog_data(pipeline);
>
> anv_pipeline_setup_l3_config(pipeline, cs_prog_data->base.total_shared > 0);
> diff --git a/src/intel/vulkan/genX_pipeline_util.h b/src/intel/vulkan/genX_pipeline_util.h
> index 0ff92f1..b390c5c 100644
> --- a/src/intel/vulkan/genX_pipeline_util.h
> +++ b/src/intel/vulkan/genX_pipeline_util.h
> @@ -53,26 +53,14 @@ vertex_element_comp_control(enum isl_format format, unsigned comp)
>
> static void
> emit_vertex_input(struct anv_pipeline *pipeline,
> - const VkPipelineVertexInputStateCreateInfo *info,
> - const struct anv_graphics_pipeline_create_info *extra)
> + const VkPipelineVertexInputStateCreateInfo *info)
> {
> const struct brw_vs_prog_data *vs_prog_data = get_vs_prog_data(pipeline);
>
> - uint32_t elements;
> - if (extra && extra->disable_vs) {
> - /* If the VS is disabled, just assume the user knows what they're
> - * doing and apply the layout blindly. This can only come from
> - * meta, so this *should* be safe.
> - */
> - elements = 0;
> - for (uint32_t i = 0; i < info->vertexAttributeDescriptionCount; i++)
> - elements |= (1 << info->pVertexAttributeDescriptions[i].location);
> - } else {
> - /* Pull inputs_read out of the VS prog data */
> - uint64_t inputs_read = vs_prog_data->inputs_read;
> - assert((inputs_read & ((1 << VERT_ATTRIB_GENERIC0) - 1)) == 0);
> - elements = inputs_read >> VERT_ATTRIB_GENERIC0;
> - }
> + /* Pull inputs_read out of the VS prog data */
> + const uint64_t inputs_read = vs_prog_data->inputs_read;
> + assert((inputs_read & ((1 << VERT_ATTRIB_GENERIC0) - 1)) == 0);
> + const uint32_t elements = inputs_read >> VERT_ATTRIB_GENERIC0;
>
> #if GEN_GEN >= 8
> /* On BDW+, we only need to allocate space for base ids. Setting up
> @@ -485,14 +473,13 @@ emit_rs_state(struct anv_pipeline *pipeline,
> const VkPipelineRasterizationStateCreateInfo *rs_info,
> const VkPipelineMultisampleStateCreateInfo *ms_info,
> const struct anv_render_pass *pass,
> - const struct anv_subpass *subpass,
> - const struct anv_graphics_pipeline_create_info *extra)
> + const struct anv_subpass *subpass)
> {
> struct GENX(3DSTATE_SF) sf = {
> GENX(3DSTATE_SF_header),
> };
>
> - sf.ViewportTransformEnable = !(extra && extra->use_rectlist);
> + sf.ViewportTransformEnable = true;
> sf.StatisticsEnable = true;
> sf.TriangleStripListProvokingVertexSelect = 0;
> sf.LineStripListProvokingVertexSelect = 0;
> @@ -525,7 +512,7 @@ emit_rs_state(struct anv_pipeline *pipeline,
> raster.CullMode = vk_to_gen_cullmode[rs_info->cullMode];
> raster.FrontFaceFillMode = vk_to_gen_fillmode[rs_info->polygonMode];
> raster.BackFaceFillMode = vk_to_gen_fillmode[rs_info->polygonMode];
> - raster.ScissorRectangleEnable = !(extra && extra->use_rectlist);
> + raster.ScissorRectangleEnable = true;
>
> #if GEN_GEN >= 9
> /* GEN9+ splits ViewportZClipTestEnable into near and far enable bits */
> @@ -929,13 +916,12 @@ emit_cb_state(struct anv_pipeline *pipeline,
> static void
> emit_3dstate_clip(struct anv_pipeline *pipeline,
> const VkPipelineViewportStateCreateInfo *vp_info,
> - const VkPipelineRasterizationStateCreateInfo *rs_info,
> - const struct anv_graphics_pipeline_create_info *extra)
> + const VkPipelineRasterizationStateCreateInfo *rs_info)
> {
> const struct brw_wm_prog_data *wm_prog_data = get_wm_prog_data(pipeline);
> (void) wm_prog_data;
> anv_batch_emit(&pipeline->batch, GENX(3DSTATE_CLIP), clip) {
> - clip.ClipEnable = !(extra && extra->use_rectlist);
> + clip.ClipEnable = true;
> clip.EarlyCullEnable = true;
> clip.APIMode = APIMODE_D3D,
> clip.ViewportXYClipTestEnable = true;
> --
> 2.5.0.400.gff86faf
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list