nir/glsl: make nir_remap_attributes public
As we plan to reuse it for ARB_gl_spirv implementation. Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
This commit is contained in:
@@ -128,23 +128,6 @@ private:
|
|||||||
|
|
||||||
} /* end of anonymous namespace */
|
} /* end of anonymous namespace */
|
||||||
|
|
||||||
static void
|
|
||||||
nir_remap_attributes(nir_shader *shader,
|
|
||||||
const nir_shader_compiler_options *options)
|
|
||||||
{
|
|
||||||
if (options->vs_inputs_dual_locations) {
|
|
||||||
nir_foreach_variable(var, &shader->inputs) {
|
|
||||||
var->data.location +=
|
|
||||||
_mesa_bitcount_64(shader->info.vs.double_inputs &
|
|
||||||
BITFIELD64_MASK(var->data.location));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Once the remap is done, reset double_inputs_read, so later it will have
|
|
||||||
* which location/slots are doubles */
|
|
||||||
shader->info.vs.double_inputs = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
nir_shader *
|
nir_shader *
|
||||||
glsl_to_nir(const struct gl_shader_program *shader_prog,
|
glsl_to_nir(const struct gl_shader_program *shader_prog,
|
||||||
gl_shader_stage stage,
|
gl_shader_stage stage,
|
||||||
|
@@ -32,6 +32,9 @@
|
|||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
|
#include "main/imports.h" /* _mesa_bitcount_64 */
|
||||||
|
#include "main/menums.h" /* BITFIELD64_MASK */
|
||||||
|
|
||||||
nir_shader *
|
nir_shader *
|
||||||
nir_shader_create(void *mem_ctx,
|
nir_shader_create(void *mem_ctx,
|
||||||
gl_shader_stage stage,
|
gl_shader_stage stage,
|
||||||
@@ -1847,3 +1850,24 @@ nir_system_value_from_intrinsic(nir_intrinsic_op intrin)
|
|||||||
unreachable("intrinsic doesn't produce a system value");
|
unreachable("intrinsic doesn't produce a system value");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* OpenGL utility method that remaps the location attributes if they are
|
||||||
|
* doubles. Not needed for vulkan due the differences on the input location
|
||||||
|
* count for doubles on vulkan vs OpenGL
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
nir_remap_attributes(nir_shader *shader,
|
||||||
|
const nir_shader_compiler_options *options)
|
||||||
|
{
|
||||||
|
if (options->vs_inputs_dual_locations) {
|
||||||
|
nir_foreach_variable(var, &shader->inputs) {
|
||||||
|
var->data.location +=
|
||||||
|
_mesa_bitcount_64(shader->info.vs.double_inputs &
|
||||||
|
BITFIELD64_MASK(var->data.location));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Once the remap is done, reset double_inputs_read, so later it will have
|
||||||
|
* which location/slots are doubles */
|
||||||
|
shader->info.vs.double_inputs = 0;
|
||||||
|
}
|
||||||
|
@@ -2999,6 +2999,9 @@ bool nir_opt_conditional_discard(nir_shader *shader);
|
|||||||
|
|
||||||
void nir_sweep(nir_shader *shader);
|
void nir_sweep(nir_shader *shader);
|
||||||
|
|
||||||
|
void nir_remap_attributes(nir_shader *shader,
|
||||||
|
const nir_shader_compiler_options *options);
|
||||||
|
|
||||||
nir_intrinsic_op nir_intrinsic_from_system_value(gl_system_value val);
|
nir_intrinsic_op nir_intrinsic_from_system_value(gl_system_value val);
|
||||||
gl_system_value nir_system_value_from_intrinsic(nir_intrinsic_op intrin);
|
gl_system_value nir_system_value_from_intrinsic(nir_intrinsic_op intrin);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user