nir: Add an info bit for uses_sample_qualifier

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Jason Ekstrand
2016-05-09 17:15:21 -07:00
parent 59156b2e96
commit a2f50d87b6
3 changed files with 13 additions and 1 deletions

View File

@@ -182,6 +182,7 @@ glsl_to_nir(const struct gl_shader_program *shader_prog,
(struct gl_fragment_program *)sh->Program;
shader->info.fs.uses_discard = fp->UsesKill;
shader->info.fs.uses_sample_qualifier = fp->IsSample != 0;
shader->info.fs.early_fragment_tests = sh->EarlyFragmentTests;
shader->info.fs.depth_layout = fp->FragDepthLayout;
break;

View File

@@ -1743,6 +1743,11 @@ typedef struct nir_shader_info {
struct {
bool uses_discard;
/**
* Whether any inputs are declared with the "sample" qualifier.
*/
bool uses_sample_qualifier;
/**
* Whether early fragment tests are enabled as defined by
* ARB_shader_image_load_store.

View File

@@ -125,9 +125,15 @@ nir_shader_gather_info(nir_shader *shader, nir_function_impl *entrypoint)
shader->stage == MESA_SHADER_FRAGMENT ||
shader->stage == MESA_SHADER_COMPUTE);
bool uses_sample_qualifier = false;
shader->info.inputs_read = 0;
foreach_list_typed(nir_variable, var, node, &shader->inputs)
foreach_list_typed(nir_variable, var, node, &shader->inputs) {
shader->info.inputs_read |= get_io_mask(var, shader->stage);
uses_sample_qualifier |= var->data.sample;
}
if (shader->stage == MESA_SHADER_FRAGMENT)
shader->info.fs.uses_sample_qualifier = uses_sample_qualifier;
/* TODO: Some day we may need to add stream support to NIR */
shader->info.outputs_written = 0;