diff options
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/Makefile.sources | 4 | ||||
-rw-r--r-- | src/compiler/glsl/glsl_to_nir.cpp | 45 | ||||
-rw-r--r-- | src/compiler/shader_info.c | 78 | ||||
-rw-r--r-- | src/compiler/shader_info.h | 7 |
4 files changed, 88 insertions, 46 deletions
diff --git a/src/compiler/Makefile.sources b/src/compiler/Makefile.sources index a30443da544..df1db0c3ec2 100644 --- a/src/compiler/Makefile.sources +++ b/src/compiler/Makefile.sources @@ -5,7 +5,9 @@ LIBCOMPILER_FILES = \ nir_types.cpp \ nir_types.h \ shader_enums.c \ - shader_enums.h + shader_enums.h \ + shader_info.c \ + shader_info.h # libglsl diff --git a/src/compiler/glsl/glsl_to_nir.cpp b/src/compiler/glsl/glsl_to_nir.cpp index 934c9d14f94..096ab4c5e2a 100644 --- a/src/compiler/glsl/glsl_to_nir.cpp +++ b/src/compiler/glsl/glsl_to_nir.cpp @@ -152,57 +152,12 @@ glsl_to_nir(const struct gl_shader_program *shader_prog, shader->info->num_abos = shader_prog->NumAtomicBuffers; shader->info->num_ssbos = sh->NumShaderStorageBlocks; shader->info->num_images = sh->NumImages; - shader->info->inputs_read = sh->Program->InputsRead; - shader->info->double_inputs_read = sh->Program->DoubleInputsRead; - shader->info->outputs_written = sh->Program->OutputsWritten; - shader->info->outputs_read = sh->Program->OutputsRead; - shader->info->patch_inputs_read = sh->Program->PatchInputsRead; - shader->info->patch_outputs_written = sh->Program->PatchOutputsWritten; - shader->info->system_values_read = sh->Program->SystemValuesRead; - shader->info->uses_texture_gather = sh->Program->UsesGather; shader->info->uses_clip_distance_out = sh->Program->ClipDistanceArraySize != 0; shader->info->separate_shader = shader_prog->SeparateShader; shader->info->has_transform_feedback_varyings = shader_prog->TransformFeedback.NumVarying > 0; - switch (stage) { - case MESA_SHADER_TESS_CTRL: - shader->info->tcs.vertices_out = sh->info.TessCtrl.VerticesOut; - break; - - case MESA_SHADER_GEOMETRY: - shader->info->gs.vertices_in = shader_prog->Geom.VerticesIn; - shader->info->gs.output_primitive = sh->info.Geom.OutputType; - shader->info->gs.vertices_out = sh->info.Geom.VerticesOut; - shader->info->gs.invocations = sh->info.Geom.Invocations; - shader->info->gs.uses_end_primitive = shader_prog->Geom.UsesEndPrimitive; - shader->info->gs.uses_streams = shader_prog->Geom.UsesStreams; - break; - - case MESA_SHADER_FRAGMENT: { - struct gl_fragment_program *fp = - (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->info.EarlyFragmentTests; - shader->info->fs.depth_layout = fp->FragDepthLayout; - break; - } - - case MESA_SHADER_COMPUTE: { - struct gl_compute_program *cp = (struct gl_compute_program *)sh->Program; - shader->info->cs.local_size[0] = cp->LocalSize[0]; - shader->info->cs.local_size[1] = cp->LocalSize[1]; - shader->info->cs.local_size[2] = cp->LocalSize[2]; - break; - } - - default: - break; /* No stage-specific info */ - } - return shader; } diff --git a/src/compiler/shader_info.c b/src/compiler/shader_info.c new file mode 100644 index 00000000000..ebd9caf1f24 --- /dev/null +++ b/src/compiler/shader_info.c @@ -0,0 +1,78 @@ +/* + * Copyright © 2016 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + */ + +#include "mesa/main/mtypes.h" + +void +copy_shader_info(const struct gl_shader_program *shader_prog, + struct gl_linked_shader *sh) +{ + shader_info *info = &sh->Program->info; + + info->inputs_read = sh->Program->InputsRead; + info->double_inputs_read = sh->Program->DoubleInputsRead; + info->outputs_written = sh->Program->OutputsWritten; + info->outputs_read = sh->Program->OutputsRead; + info->patch_inputs_read = sh->Program->PatchInputsRead; + info->patch_outputs_written = sh->Program->PatchOutputsWritten; + info->system_values_read = sh->Program->SystemValuesRead; + info->uses_texture_gather = sh->Program->UsesGather; + + switch (sh->Stage) { + case MESA_SHADER_TESS_CTRL: + info->tcs.vertices_out = sh->info.TessCtrl.VerticesOut; + break; + + case MESA_SHADER_GEOMETRY: + info->gs.vertices_in = shader_prog->Geom.VerticesIn; + info->gs.output_primitive = sh->info.Geom.OutputType; + info->gs.vertices_out = sh->info.Geom.VerticesOut; + info->gs.invocations = sh->info.Geom.Invocations; + info->gs.uses_end_primitive = shader_prog->Geom.UsesEndPrimitive; + info->gs.uses_streams = shader_prog->Geom.UsesStreams; + break; + + case MESA_SHADER_FRAGMENT: { + struct gl_fragment_program *fp = + (struct gl_fragment_program *)sh->Program; + + info->fs.uses_discard = fp->UsesKill; + info->fs.uses_sample_qualifier = fp->IsSample != 0; + info->fs.early_fragment_tests = sh->info.EarlyFragmentTests; + info->fs.depth_layout = fp->FragDepthLayout; + break; + } + + case MESA_SHADER_COMPUTE: { + struct gl_compute_program *cp = (struct gl_compute_program *)sh->Program; + info->cs.local_size[0] = cp->LocalSize[0]; + info->cs.local_size[1] = cp->LocalSize[1]; + info->cs.local_size[2] = cp->LocalSize[2]; + break; + } + + default: + break; /* No stage-specific info */ + } +} diff --git a/src/compiler/shader_info.h b/src/compiler/shader_info.h index ab38562d95e..7624008dedc 100644 --- a/src/compiler/shader_info.h +++ b/src/compiler/shader_info.h @@ -124,6 +124,13 @@ typedef struct shader_info { }; } shader_info; +struct gl_shader_program; +struct gl_linked_shader; + +void +copy_shader_info(const struct gl_shader_program *shader_prog, + struct gl_linked_shader *sh); + #ifdef __cplusplus } #endif |