X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fdrivers%2Fdri%2Fi965%2Fbrw_vs_surface_state.c;h=387a54bdb0b4fc346ca0a0887e7fa0b71377d361;hb=ed65e6ef49e17e9cae93a8f98e2968346de2bc6e;hp=b2f91bd412bbb43e1b119cd8ec8e838dde8484c8;hpb=0f8ec779ddff4126837a7d4216ecf1d4b97e93d2;p=mesa.git diff --git a/src/mesa/drivers/dri/i965/brw_vs_surface_state.c b/src/mesa/drivers/dri/i965/brw_vs_surface_state.c index b2f91bd412b..387a54bdb0b 100644 --- a/src/mesa/drivers/dri/i965/brw_vs_surface_state.c +++ b/src/mesa/drivers/dri/i965/brw_vs_surface_state.c @@ -31,6 +31,7 @@ #include "main/mtypes.h" #include "program/prog_parameter.h" +#include "main/shaderapi.h" #include "brw_context.h" #include "brw_state.h" @@ -50,13 +51,12 @@ */ void brw_upload_pull_constants(struct brw_context *brw, - GLbitfield brw_new_constbuf, + GLbitfield64 brw_new_constbuf, const struct gl_program *prog, struct brw_stage_state *stage_state, - const struct brw_stage_prog_data *prog_data, - bool dword_pitch) + const struct brw_stage_prog_data *prog_data) { - int i; + unsigned i; uint32_t surf_index = prog_data->binding_table.pull_constants_start; if (!prog_data->nr_pull_params) { @@ -94,8 +94,7 @@ brw_upload_pull_constants(struct brw_context *brw, } brw_create_constant_surface(brw, const_bo, const_offset, size, - &stage_state->surf_offset[surf_index], - dword_pitch); + &stage_state->surf_offset[surf_index]); drm_intel_bo_unreference(const_bo); brw->ctx.NewDriverState |= brw_new_constbuf; @@ -112,7 +111,6 @@ static void brw_upload_vs_pull_constants(struct brw_context *brw) { struct brw_stage_state *stage_state = &brw->vs.base; - bool dword_pitch; /* BRW_NEW_VERTEX_PROGRAM */ struct brw_vertex_program *vp = @@ -121,17 +119,17 @@ brw_upload_vs_pull_constants(struct brw_context *brw) /* BRW_NEW_VS_PROG_DATA */ const struct brw_stage_prog_data *prog_data = &brw->vs.prog_data->base.base; - dword_pitch = brw->vs.prog_data->base.dispatch_mode == DISPATCH_MODE_SIMD8; - + _mesa_shader_write_subroutine_indices(&brw->ctx, MESA_SHADER_VERTEX); /* _NEW_PROGRAM_CONSTANTS */ brw_upload_pull_constants(brw, BRW_NEW_VS_CONSTBUF, &vp->program.Base, - stage_state, prog_data, dword_pitch); + stage_state, prog_data); } const struct brw_tracked_state brw_vs_pull_constants = { .dirty = { .mesa = _NEW_PROGRAM_CONSTANTS, .brw = BRW_NEW_BATCH | + BRW_NEW_BLORP | BRW_NEW_VERTEX_PROGRAM | BRW_NEW_VS_PROG_DATA, }, @@ -145,22 +143,20 @@ brw_upload_vs_ubo_surfaces(struct brw_context *brw) /* _NEW_PROGRAM */ struct gl_shader_program *prog = ctx->_Shader->CurrentProgram[MESA_SHADER_VERTEX]; - bool dword_pitch; if (!prog) return; /* BRW_NEW_VS_PROG_DATA */ - dword_pitch = brw->vs.prog_data->base.dispatch_mode == DISPATCH_MODE_SIMD8; brw_upload_ubo_surfaces(brw, prog->_LinkedShaders[MESA_SHADER_VERTEX], - &brw->vs.base, &brw->vs.prog_data->base.base, - dword_pitch); + &brw->vs.base, &brw->vs.prog_data->base.base); } const struct brw_tracked_state brw_vs_ubo_surfaces = { .dirty = { .mesa = _NEW_PROGRAM, .brw = BRW_NEW_BATCH | + BRW_NEW_BLORP | BRW_NEW_UNIFORM_BUFFER | BRW_NEW_VS_PROG_DATA, }, @@ -177,8 +173,8 @@ brw_upload_vs_abo_surfaces(struct brw_context *brw) if (prog) { /* BRW_NEW_VS_PROG_DATA */ - brw_upload_abo_surfaces(brw, prog, &brw->vs.base, - &brw->vs.prog_data->base.base); + brw_upload_abo_surfaces(brw, prog->_LinkedShaders[MESA_SHADER_VERTEX], + &brw->vs.base, &brw->vs.prog_data->base.base); } } @@ -187,7 +183,35 @@ const struct brw_tracked_state brw_vs_abo_surfaces = { .mesa = _NEW_PROGRAM, .brw = BRW_NEW_ATOMIC_BUFFER | BRW_NEW_BATCH | + BRW_NEW_BLORP | BRW_NEW_VS_PROG_DATA, }, .emit = brw_upload_vs_abo_surfaces, }; + +static void +brw_upload_vs_image_surfaces(struct brw_context *brw) +{ + struct gl_context *ctx = &brw->ctx; + /* BRW_NEW_VERTEX_PROGRAM */ + struct gl_shader_program *prog = + ctx->_Shader->CurrentProgram[MESA_SHADER_VERTEX]; + + if (prog) { + /* BRW_NEW_VS_PROG_DATA, BRW_NEW_IMAGE_UNITS, _NEW_TEXTURE */ + brw_upload_image_surfaces(brw, prog->_LinkedShaders[MESA_SHADER_VERTEX], + &brw->vs.base, &brw->vs.prog_data->base.base); + } +} + +const struct brw_tracked_state brw_vs_image_surfaces = { + .dirty = { + .mesa = _NEW_TEXTURE, + .brw = BRW_NEW_BATCH | + BRW_NEW_BLORP | + BRW_NEW_IMAGE_UNITS | + BRW_NEW_VERTEX_PROGRAM | + BRW_NEW_VS_PROG_DATA, + }, + .emit = brw_upload_vs_image_surfaces, +};