mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 11:08:03 +02:00
i965g: add new state flag tracking fs signature changes
This commit is contained in:
parent
c58e20fbbb
commit
47cef2bb8f
4 changed files with 20 additions and 10 deletions
|
|
@ -233,6 +233,7 @@ struct brw_sampler {
|
|||
#define PIPE_NEW_SCISSOR 0x100000
|
||||
#define PIPE_NEW_BOUND_TEXTURES 0x200000
|
||||
#define PIPE_NEW_NR_CBUFS 0x400000
|
||||
#define PIPE_NEW_FRAGMENT_SIGNATURE 0x800000
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -58,9 +58,20 @@ static GLboolean has_flow_control(const struct tgsi_shader_info *info)
|
|||
|
||||
static void brw_bind_fs_state( struct pipe_context *pipe, void *prog )
|
||||
{
|
||||
struct brw_fragment_shader *fs = (struct brw_fragment_shader *)prog;
|
||||
struct brw_context *brw = brw_context(pipe);
|
||||
|
||||
if (brw->curr.fragment_shader == fs)
|
||||
return;
|
||||
|
||||
brw->curr.fragment_shader = (struct brw_fragment_shader *)prog;
|
||||
if (brw->curr.fragment_shader == NULL ||
|
||||
fs == NULL ||
|
||||
memcmp(&brw->curr.fragment_shader->signature, &fs->signature,
|
||||
brw_fs_signature_size(&fs->signature)) != 0) {
|
||||
brw->state.dirty.mesa |= PIPE_NEW_FRAGMENT_SIGNATURE;
|
||||
}
|
||||
|
||||
brw->curr.fragment_shader = fs;
|
||||
brw->state.dirty.mesa |= PIPE_NEW_FRAGMENT_SHADER;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -125,11 +125,10 @@ static enum pipe_error upload_sf_prog(struct brw_context *brw)
|
|||
/* Populate the key, noting state dependencies:
|
||||
*/
|
||||
|
||||
/* XXX: Add one to turn the max value into a count, then add
|
||||
* another one to account for the position input.
|
||||
/* XXX: Add one to account for the position input.
|
||||
*/
|
||||
/* PIPE_NEW_FRAGMENT_SHADER */
|
||||
key.nr_attrs = brw->curr.fragment_shader->info.file_max[TGSI_FILE_INPUT] + 2;
|
||||
/* PIPE_NEW_FRAGMENT_SIGNATURE */
|
||||
key.nr_attrs = brw->curr.fragment_shader->signature.nr_inputs + 1;
|
||||
|
||||
|
||||
/* XXX: this is probably where the mapping between vertex shader
|
||||
|
|
@ -194,7 +193,7 @@ static enum pipe_error upload_sf_prog(struct brw_context *brw)
|
|||
|
||||
const struct brw_tracked_state brw_sf_prog = {
|
||||
.dirty = {
|
||||
.mesa = (PIPE_NEW_RAST | PIPE_NEW_VERTEX_SHADER),
|
||||
.mesa = (PIPE_NEW_RAST | PIPE_NEW_FRAGMENT_SIGNATURE),
|
||||
.brw = (BRW_NEW_REDUCED_PRIMITIVE),
|
||||
.cache = 0
|
||||
},
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ static enum pipe_error brw_upload_vs_prog(struct brw_context *brw)
|
|||
{
|
||||
struct brw_vs_prog_key key;
|
||||
struct brw_vertex_shader *vp = brw->curr.vertex_shader;
|
||||
struct brw_fragment_shader *fs = brw->curr.fragment_shader;
|
||||
struct brw_fs_signature *sig = &brw->curr.fragment_shader->signature;
|
||||
enum pipe_error ret;
|
||||
|
||||
memset(&key, 0, sizeof(key));
|
||||
|
|
@ -111,8 +111,7 @@ static enum pipe_error brw_upload_vs_prog(struct brw_context *brw)
|
|||
key.copy_edgeflag = (brw->curr.rast->templ.fill_ccw != PIPE_POLYGON_MODE_FILL ||
|
||||
brw->curr.rast->templ.fill_cw != PIPE_POLYGON_MODE_FILL);
|
||||
|
||||
memcpy(&key.fs_signature, &fs->signature,
|
||||
brw_fs_signature_size(&fs->signature));
|
||||
memcpy(&key.fs_signature, sig, brw_fs_signature_size(sig));
|
||||
|
||||
|
||||
/* Make an early check for the key.
|
||||
|
|
@ -138,7 +137,7 @@ const struct brw_tracked_state brw_vs_prog = {
|
|||
.dirty = {
|
||||
.mesa = (PIPE_NEW_CLIP |
|
||||
PIPE_NEW_RAST |
|
||||
PIPE_NEW_FRAGMENT_SHADER),
|
||||
PIPE_NEW_FRAGMENT_SIGNATURE),
|
||||
.brw = BRW_NEW_VERTEX_PROGRAM,
|
||||
.cache = 0
|
||||
},
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue