st/mesa: add texture updates for tessellation programs

This commit is contained in:
Ilia Mirkin
2014-07-12 17:15:51 -04:00
committed by Marek Olšák
parent bda79139d4
commit 40bc1c32d2
4 changed files with 72 additions and 0 deletions

View File

@@ -61,6 +61,8 @@ static const struct st_tracked_state *atoms[] =
&st_update_vertex_texture, &st_update_vertex_texture,
&st_update_fragment_texture, &st_update_fragment_texture,
&st_update_geometry_texture, &st_update_geometry_texture,
&st_update_tessctrl_texture,
&st_update_tesseval_texture,
&st_update_sampler, /* depends on update_*_texture for swizzle */ &st_update_sampler, /* depends on update_*_texture for swizzle */
&st_update_framebuffer, &st_update_framebuffer,
&st_update_msaa, &st_update_msaa,

View File

@@ -66,6 +66,8 @@ extern const struct st_tracked_state st_update_sampler;
extern const struct st_tracked_state st_update_fragment_texture; extern const struct st_tracked_state st_update_fragment_texture;
extern const struct st_tracked_state st_update_vertex_texture; extern const struct st_tracked_state st_update_vertex_texture;
extern const struct st_tracked_state st_update_geometry_texture; extern const struct st_tracked_state st_update_geometry_texture;
extern const struct st_tracked_state st_update_tessctrl_texture;
extern const struct st_tracked_state st_update_tesseval_texture;
extern const struct st_tracked_state st_finalize_textures; extern const struct st_tracked_state st_finalize_textures;
extern const struct st_tracked_state st_update_fs_constants; extern const struct st_tracked_state st_update_fs_constants;
extern const struct st_tracked_state st_update_gs_constants; extern const struct st_tracked_state st_update_gs_constants;

View File

@@ -305,6 +305,22 @@ update_samplers(struct st_context *st)
st->state.samplers[PIPE_SHADER_GEOMETRY], st->state.samplers[PIPE_SHADER_GEOMETRY],
&st->state.num_samplers[PIPE_SHADER_GEOMETRY]); &st->state.num_samplers[PIPE_SHADER_GEOMETRY]);
} }
if (ctx->TessCtrlProgram._Current) {
update_shader_samplers(st,
PIPE_SHADER_TESS_CTRL,
&ctx->TessCtrlProgram._Current->Base,
ctx->Const.Program[MESA_SHADER_TESS_CTRL].MaxTextureImageUnits,
st->state.samplers[PIPE_SHADER_TESS_CTRL],
&st->state.num_samplers[PIPE_SHADER_TESS_CTRL]);
}
if (ctx->TessEvalProgram._Current) {
update_shader_samplers(st,
PIPE_SHADER_TESS_EVAL,
&ctx->TessEvalProgram._Current->Base,
ctx->Const.Program[MESA_SHADER_TESS_EVAL].MaxTextureImageUnits,
st->state.samplers[PIPE_SHADER_TESS_EVAL],
&st->state.num_samplers[PIPE_SHADER_TESS_EVAL]);
}
} }

View File

@@ -474,6 +474,38 @@ update_geometry_textures(struct st_context *st)
} }
static void
update_tessctrl_textures(struct st_context *st)
{
const struct gl_context *ctx = st->ctx;
if (ctx->TessCtrlProgram._Current) {
update_textures(st,
PIPE_SHADER_TESS_CTRL,
&ctx->TessCtrlProgram._Current->Base,
ctx->Const.Program[MESA_SHADER_TESS_CTRL].MaxTextureImageUnits,
st->state.sampler_views[PIPE_SHADER_TESS_CTRL],
&st->state.num_sampler_views[PIPE_SHADER_TESS_CTRL]);
}
}
static void
update_tesseval_textures(struct st_context *st)
{
const struct gl_context *ctx = st->ctx;
if (ctx->TessEvalProgram._Current) {
update_textures(st,
PIPE_SHADER_TESS_EVAL,
&ctx->TessEvalProgram._Current->Base,
ctx->Const.Program[MESA_SHADER_TESS_EVAL].MaxTextureImageUnits,
st->state.sampler_views[PIPE_SHADER_TESS_EVAL],
&st->state.num_sampler_views[PIPE_SHADER_TESS_EVAL]);
}
}
const struct st_tracked_state st_update_fragment_texture = { const struct st_tracked_state st_update_fragment_texture = {
"st_update_texture", /* name */ "st_update_texture", /* name */
{ /* dirty */ { /* dirty */
@@ -504,6 +536,26 @@ const struct st_tracked_state st_update_geometry_texture = {
}; };
const struct st_tracked_state st_update_tessctrl_texture = {
"st_update_tessctrl_texture", /* name */
{ /* dirty */
_NEW_TEXTURE, /* mesa */
ST_NEW_TESSCTRL_PROGRAM, /* st */
},
update_tessctrl_textures /* update */
};
const struct st_tracked_state st_update_tesseval_texture = {
"st_update_tesseval_texture", /* name */
{ /* dirty */
_NEW_TEXTURE, /* mesa */
ST_NEW_TESSEVAL_PROGRAM, /* st */
},
update_tesseval_textures /* update */
};
static void static void
finalize_textures(struct st_context *st) finalize_textures(struct st_context *st)