mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-28 19:00:13 +01:00
i965: Add a fs_visitor constructor that takes a brw_gs_compile.
Unlike the vs/wm structs, brw_gs_compile is actually useful: it contains the input VUE map and information about the control data headers. Passing this in allows us to share that code in brw_gs.c, and calculate them before deciding on vec4 vs. scalar mode, as it's independent of that choice. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>
This commit is contained in:
parent
55dfd39b5f
commit
b3ebf03b84
2 changed files with 39 additions and 3 deletions
|
|
@ -62,6 +62,8 @@ namespace brw {
|
|||
class fs_live_variables;
|
||||
}
|
||||
|
||||
struct brw_gs_compile;
|
||||
|
||||
static inline fs_reg
|
||||
offset(fs_reg reg, const brw::fs_builder& bld, unsigned delta)
|
||||
{
|
||||
|
|
@ -99,7 +101,12 @@ public:
|
|||
const nir_shader *shader,
|
||||
unsigned dispatch_width,
|
||||
int shader_time_index);
|
||||
|
||||
fs_visitor(const struct brw_compiler *compiler, void *log_data,
|
||||
void *mem_ctx,
|
||||
struct brw_gs_compile *gs_compile,
|
||||
struct brw_gs_prog_data *prog_data,
|
||||
const nir_shader *shader);
|
||||
void init();
|
||||
~fs_visitor();
|
||||
|
||||
fs_reg vgrf(const glsl_type *const type);
|
||||
|
|
@ -298,6 +305,8 @@ public:
|
|||
const void *const key;
|
||||
const struct brw_sampler_prog_key_data *key_tex;
|
||||
|
||||
struct brw_gs_compile *gs_compile;
|
||||
|
||||
struct brw_stage_prog_data *prog_data;
|
||||
struct gl_program *prog;
|
||||
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@
|
|||
#include "brw_wm.h"
|
||||
#include "brw_cs.h"
|
||||
#include "brw_vec4.h"
|
||||
#include "brw_vec4_gs_visitor.h"
|
||||
#include "brw_fs.h"
|
||||
#include "main/uniforms.h"
|
||||
#include "glsl/nir/glsl_types.h"
|
||||
|
|
@ -1085,11 +1086,33 @@ fs_visitor::fs_visitor(const struct brw_compiler *compiler, void *log_data,
|
|||
unsigned dispatch_width,
|
||||
int shader_time_index)
|
||||
: backend_shader(compiler, log_data, mem_ctx, shader, prog_data),
|
||||
key(key), prog_data(prog_data), prog(prog),
|
||||
key(key), gs_compile(NULL), prog_data(prog_data), prog(prog),
|
||||
dispatch_width(dispatch_width),
|
||||
shader_time_index(shader_time_index),
|
||||
promoted_constants(0),
|
||||
bld(fs_builder(this, dispatch_width).at_end())
|
||||
{
|
||||
init();
|
||||
}
|
||||
|
||||
fs_visitor::fs_visitor(const struct brw_compiler *compiler, void *log_data,
|
||||
void *mem_ctx,
|
||||
struct brw_gs_compile *c,
|
||||
struct brw_gs_prog_data *prog_data,
|
||||
const nir_shader *shader)
|
||||
: backend_shader(compiler, log_data, mem_ctx, shader,
|
||||
&prog_data->base.base),
|
||||
key(&c->key), gs_compile(c),
|
||||
prog_data(&prog_data->base.base), prog(NULL),
|
||||
dispatch_width(8),
|
||||
shader_time_index(ST_GS),
|
||||
bld(fs_builder(this, dispatch_width).at_end())
|
||||
{
|
||||
init();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fs_visitor::init()
|
||||
{
|
||||
switch (stage) {
|
||||
case MESA_SHADER_FRAGMENT:
|
||||
|
|
@ -1108,6 +1131,8 @@ fs_visitor::fs_visitor(const struct brw_compiler *compiler, void *log_data,
|
|||
unreachable("unhandled shader stage");
|
||||
}
|
||||
|
||||
this->prog_data = this->stage_prog_data;
|
||||
|
||||
this->failed = false;
|
||||
this->simd16_unsupported = false;
|
||||
this->no16_msg = NULL;
|
||||
|
|
@ -1133,6 +1158,8 @@ fs_visitor::fs_visitor(const struct brw_compiler *compiler, void *log_data,
|
|||
this->pull_constant_loc = NULL;
|
||||
this->push_constant_loc = NULL;
|
||||
|
||||
this->promoted_constants = 0,
|
||||
|
||||
this->spilled_any_registers = false;
|
||||
this->do_dual_src = false;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue