From: Kenneth Graunke Date: Sat, 2 Feb 2019 08:43:42 +0000 (-0800) Subject: nir: Record info->fs.pixel_center_integer in lower_system_values X-Git-Tag: upstream/19.3.0~10024 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3327c93510b2956ef979778e52848331b597cbf0;p=platform%2Fupstream%2Fmesa.git nir: Record info->fs.pixel_center_integer in lower_system_values radeonsi uses a system value for gl_FragCoord rather than an input var. These get translated into load_frag_coord NIR intrinsics, which lose the pixel_center_integer and origin_upper_left decorations. To cope with this, Tim added a shader_info field for pixel_center_integer, and made glsl_to_nir set it accordingly. prog_to_nir also needs to handle these fragcoord conventions. Instead of duplicating the logic to set the info field, just move it to nir_lower_system_values so it'll happen regardless of who makes the NIR. (For what it's worth, we don't need an info flag for origin_upper_left, because radeonsi lowers origin conventions in nir_lower_wpos_ytransform before nir_lower_system_values destroys the variable and qualifiers.) Reviewed-by: Eric Anholt --- diff --git a/src/compiler/glsl/glsl_to_nir.cpp b/src/compiler/glsl/glsl_to_nir.cpp index d2db0f9..90aa21f 100644 --- a/src/compiler/glsl/glsl_to_nir.cpp +++ b/src/compiler/glsl/glsl_to_nir.cpp @@ -389,11 +389,6 @@ nir_visitor::visit(ir_variable *ir) var->data.pixel_center_integer = ir->data.pixel_center_integer; var->data.location_frac = ir->data.location_frac; - if (var->data.pixel_center_integer) { - assert(shader->info.stage == MESA_SHADER_FRAGMENT); - shader->info.fs.pixel_center_integer = true; - } - switch (ir->data.depth_layout) { case ir_depth_layout_none: var->data.depth_layout = nir_depth_layout_none; diff --git a/src/compiler/nir/nir_lower_system_values.c b/src/compiler/nir/nir_lower_system_values.c index 68b0ea8..7c1aa5f 100644 --- a/src/compiler/nir/nir_lower_system_values.c +++ b/src/compiler/nir/nir_lower_system_values.c @@ -254,6 +254,12 @@ convert_block(nir_block *block, nir_builder *b) break; } + case SYSTEM_VALUE_FRAG_COORD: + assert(b->shader->info.stage == MESA_SHADER_FRAGMENT); + b->shader->info.fs.pixel_center_integer = + var->data.pixel_center_integer; + break; + default: break; }