glsl: add new build program resource helpers
These will be used by a new nir based glsl varying linker that will add varyings directly to the list before the are packed and we lose the information. Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15731>
This commit is contained in:

committed by
Marge Bot

parent
23ea24e11f
commit
43a8454ea8
@@ -507,6 +507,36 @@ add_interface_variables(const struct gl_constants *consts,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
nir_add_packed_var_to_resource_list(const struct gl_constants *consts,
|
||||||
|
struct gl_shader_program *shProg,
|
||||||
|
struct set *resource_set,
|
||||||
|
nir_variable *var,
|
||||||
|
unsigned stage, GLenum type)
|
||||||
|
{
|
||||||
|
if (!add_shader_variable(consts, shProg, resource_set, 1 << stage,
|
||||||
|
type, var, var->name, var->type, false,
|
||||||
|
var->data.location - VARYING_SLOT_VAR0,
|
||||||
|
inout_has_same_location(var, stage), NULL))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initilise list of program resources that point to resource data.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
init_program_resource_list(struct gl_shader_program *prog)
|
||||||
|
{
|
||||||
|
/* Rebuild resource list. */
|
||||||
|
if (prog->data->ProgramResourceList) {
|
||||||
|
ralloc_free(prog->data->ProgramResourceList);
|
||||||
|
prog->data->ProgramResourceList = NULL;
|
||||||
|
prog->data->NumProgramResourceList = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* TODO: as we keep adding features, this method is becoming more and more
|
/* TODO: as we keep adding features, this method is becoming more and more
|
||||||
* similar to its GLSL counterpart at linker.cpp. Eventually it would be good
|
* similar to its GLSL counterpart at linker.cpp. Eventually it would be good
|
||||||
* to check if they could be refactored, and reduce code duplication somehow
|
* to check if they could be refactored, and reduce code duplication somehow
|
||||||
@@ -517,11 +547,8 @@ nir_build_program_resource_list(const struct gl_constants *consts,
|
|||||||
bool rebuild_resourse_list)
|
bool rebuild_resourse_list)
|
||||||
{
|
{
|
||||||
/* Rebuild resource list. */
|
/* Rebuild resource list. */
|
||||||
if (prog->data->ProgramResourceList && rebuild_resourse_list) {
|
if (rebuild_resourse_list)
|
||||||
ralloc_free(prog->data->ProgramResourceList);
|
init_program_resource_list(prog);
|
||||||
prog->data->ProgramResourceList = NULL;
|
|
||||||
prog->data->NumProgramResourceList = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int input_stage = MESA_SHADER_STAGES, output_stage = 0;
|
int input_stage = MESA_SHADER_STAGES, output_stage = 0;
|
||||||
|
|
||||||
|
@@ -24,6 +24,8 @@
|
|||||||
#ifndef GL_NIR_LINKER_H
|
#ifndef GL_NIR_LINKER_H
|
||||||
#define GL_NIR_LINKER_H
|
#define GL_NIR_LINKER_H
|
||||||
|
|
||||||
|
#include "main/glheader.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
@@ -59,6 +61,15 @@ bool gl_nir_link_uniforms(const struct gl_constants *consts,
|
|||||||
void gl_nir_set_uniform_initializers(const struct gl_constants *consts,
|
void gl_nir_set_uniform_initializers(const struct gl_constants *consts,
|
||||||
struct gl_shader_program *prog);
|
struct gl_shader_program *prog);
|
||||||
|
|
||||||
|
bool nir_add_packed_var_to_resource_list(const struct gl_constants *consts,
|
||||||
|
struct gl_shader_program *shProg,
|
||||||
|
struct set *resource_set,
|
||||||
|
nir_variable *var,
|
||||||
|
unsigned stage, GLenum type);
|
||||||
|
|
||||||
|
void
|
||||||
|
init_program_resource_list(struct gl_shader_program *prog);
|
||||||
|
|
||||||
void nir_build_program_resource_list(const struct gl_constants *consts,
|
void nir_build_program_resource_list(const struct gl_constants *consts,
|
||||||
struct gl_shader_program *prog,
|
struct gl_shader_program *prog,
|
||||||
bool rebuild_resourse_list);
|
bool rebuild_resourse_list);
|
||||||
|
Reference in New Issue
Block a user