Commit 3327c935 authored by Kenneth Graunke's avatar Kenneth Graunke
Browse files

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: Emma Anholt's avatarEric Anholt <eric@anholt.net>
parent 536abd45
......@@ -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;
......
......@@ -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;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment