X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fdrivers%2Fdri%2Fi965%2Fbrw_gs_surface_state.c;h=6f2629eb29d03d1ca56e7cd9fd9844b5b54bf59a;hb=eb3047c094abfa03e071453d7c373e9c2c574370;hp=0b8bfc3d9bdd6a79ff48289784baad84908a50ec;hpb=a62edcce4eb4c800d972817a20ee874bf2a2c3ef;p=mesa.git diff --git a/src/mesa/drivers/dri/i965/brw_gs_surface_state.c b/src/mesa/drivers/dri/i965/brw_gs_surface_state.c index 0b8bfc3d9bd..6f2629eb29d 100644 --- a/src/mesa/drivers/dri/i965/brw_gs_surface_state.c +++ b/src/mesa/drivers/dri/i965/brw_gs_surface_state.c @@ -23,6 +23,7 @@ #include "main/mtypes.h" #include "program/prog_parameter.h" +#include "main/shaderapi.h" #include "brw_context.h" #include "brw_state.h" @@ -40,19 +41,19 @@ brw_upload_gs_pull_constants(struct brw_context *brw) struct brw_stage_state *stage_state = &brw->gs.base; /* BRW_NEW_GEOMETRY_PROGRAM */ - struct brw_geometry_program *gp = - (struct brw_geometry_program *) brw->geometry_program; + struct brw_program *gp = + (struct brw_program *) brw->programs[MESA_SHADER_GEOMETRY]; if (!gp) return; /* BRW_NEW_GS_PROG_DATA */ - const struct brw_vue_prog_data *prog_data = &brw->gs.prog_data->base; - const bool dword_pitch = prog_data->dispatch_mode == DISPATCH_MODE_SIMD8; + const struct brw_stage_prog_data *prog_data = brw->gs.base.prog_data; + _mesa_shader_write_subroutine_indices(&brw->ctx, MESA_SHADER_GEOMETRY); /* _NEW_PROGRAM_CONSTANTS */ - brw_upload_pull_constants(brw, BRW_NEW_GS_CONSTBUF, &gp->program.Base, - stage_state, &prog_data->base, dword_pitch); + brw_upload_pull_constants(brw, BRW_NEW_GS_CONSTBUF, &gp->program, + stage_state, prog_data); } const struct brw_tracked_state brw_gs_pull_constants = { @@ -71,18 +72,13 @@ brw_upload_gs_ubo_surfaces(struct brw_context *brw) struct gl_context *ctx = &brw->ctx; /* _NEW_PROGRAM */ - struct gl_shader_program *prog = + struct gl_program *prog = ctx->_Shader->CurrentProgram[MESA_SHADER_GEOMETRY]; - if (!prog) - return; - /* BRW_NEW_GS_PROG_DATA */ - struct brw_vue_prog_data *prog_data = &brw->gs.prog_data->base; - bool dword_pitch = prog_data->dispatch_mode == DISPATCH_MODE_SIMD8; + struct brw_stage_prog_data *prog_data = brw->gs.base.prog_data; - brw_upload_ubo_surfaces(brw, prog->_LinkedShaders[MESA_SHADER_GEOMETRY], - &brw->gs.base, &prog_data->base, dword_pitch); + brw_upload_ubo_surfaces(brw, prog, &brw->gs.base, prog_data); } const struct brw_tracked_state brw_gs_ubo_surfaces = { @@ -96,26 +92,26 @@ const struct brw_tracked_state brw_gs_ubo_surfaces = { }; static void -brw_upload_gs_abo_surfaces(struct brw_context *brw) +brw_upload_gs_image_surfaces(struct brw_context *brw) { - struct gl_context *ctx = &brw->ctx; - /* _NEW_PROGRAM */ - struct gl_shader_program *prog = - ctx->_Shader->CurrentProgram[MESA_SHADER_GEOMETRY]; + /* BRW_NEW_GEOMETRY_PROGRAM */ + const struct gl_program *gp = brw->programs[MESA_SHADER_GEOMETRY]; - if (prog) { - /* BRW_NEW_GS_PROG_DATA */ - brw_upload_abo_surfaces(brw, prog, &brw->gs.base, - &brw->gs.prog_data->base.base); + if (gp) { + /* BRW_NEW_GS_PROG_DATA, BRW_NEW_IMAGE_UNITS, _NEW_TEXTURE */ + brw_upload_image_surfaces(brw, gp, &brw->gs.base, + brw->gs.base.prog_data); } } -const struct brw_tracked_state brw_gs_abo_surfaces = { +const struct brw_tracked_state brw_gs_image_surfaces = { .dirty = { - .mesa = _NEW_PROGRAM, - .brw = BRW_NEW_ATOMIC_BUFFER | - BRW_NEW_BATCH | - BRW_NEW_GS_PROG_DATA, + .mesa = _NEW_TEXTURE, + .brw = BRW_NEW_BATCH | + BRW_NEW_AUX_STATE | + BRW_NEW_GEOMETRY_PROGRAM | + BRW_NEW_GS_PROG_DATA | + BRW_NEW_IMAGE_UNITS, }, - .emit = brw_upload_gs_abo_surfaces, + .emit = brw_upload_gs_image_surfaces, };