On Thu, Jun 11, 2015 at 5:47 PM, Brian Paul <bri...@vmware.com> wrote: > On 06/11/2015 02:38 PM, Rob Clark wrote: >> >> From: Rob Clark <robcl...@freedesktop.org> >> >> Some hardware needs to know the sampler type. Update the blit related >> shaders to include SVIEW decl. >> >> Signed-off-by: Rob Clark <robcl...@freedesktop.org> >> --- >> src/gallium/auxiliary/util/u_blit.c | 35 +++++++++--- >> src/gallium/auxiliary/util/u_blitter.c | 53 +++++++++++++----- >> src/gallium/auxiliary/util/u_simple_shaders.c | 78 >> ++++++++++++++++++++------- >> src/gallium/auxiliary/util/u_simple_shaders.h | 16 +++--- >> src/gallium/auxiliary/util/u_tests.c | 3 +- >> src/gallium/tests/trivial/quad-tex.c | 2 +- >> 6 files changed, 140 insertions(+), 47 deletions(-) >> >> diff --git a/src/gallium/auxiliary/util/u_blit.c >> b/src/gallium/auxiliary/util/u_blit.c >> index 3f3b5fe..e3f3055 100644 >> --- a/src/gallium/auxiliary/util/u_blit.c >> +++ b/src/gallium/auxiliary/util/u_blit.c >> @@ -65,7 +65,7 @@ struct blit_state >> struct pipe_vertex_element velem[2]; >> >> void *vs; >> - void *fs[PIPE_MAX_TEXTURE_TYPES][TGSI_WRITEMASK_XYZW + 1]; >> + void *fs[PIPE_MAX_TEXTURE_TYPES][TGSI_WRITEMASK_XYZW + 1][3]; >> >> struct pipe_resource *vbuf; /**< quad vertices */ >> unsigned vbuf_slot; >> @@ -135,15 +135,17 @@ void >> util_destroy_blit(struct blit_state *ctx) >> { >> struct pipe_context *pipe = ctx->pipe; >> - unsigned i, j; >> + unsigned i, j, k; >> >> if (ctx->vs) >> pipe->delete_vs_state(pipe, ctx->vs); >> >> for (i = 0; i < Elements(ctx->fs); i++) { >> for (j = 0; j < Elements(ctx->fs[i]); j++) { >> - if (ctx->fs[i][j]) >> - pipe->delete_fs_state(pipe, ctx->fs[i][j]); >> + for (k = 0; k < Elements(ctx->fs[i][j]); k++) { >> + if (ctx->fs[i][j][k]) >> + pipe->delete_fs_state(pipe, ctx->fs[i][j][k]); >> + } >> } >> } >> >> @@ -158,18 +160,34 @@ util_destroy_blit(struct blit_state *ctx) >> */ >> static INLINE void >> set_fragment_shader(struct blit_state *ctx, uint writemask, >> + enum pipe_format format, >> enum pipe_texture_target pipe_tex) >> { >> - if (!ctx->fs[pipe_tex][writemask]) { >> + enum tgsi_return_type stype; >> + unsigned idx; >> + >> + if (util_format_is_pure_uint(format)) { >> + stype = TGSI_RETURN_TYPE_UINT; >> + idx = 0; >> + } else if (util_format_is_pure_sint(format)) { >> + stype = TGSI_RETURN_TYPE_SINT; >> + idx = 1; >> + } else { >> + stype = TGSI_RETURN_TYPE_FLOAT; >> + idx = 2; >> + } >> + >> + if (!ctx->fs[pipe_tex][writemask][idx]) { >> unsigned tgsi_tex = util_pipe_tex_to_tgsi_tex(pipe_tex, 0); >> >> - ctx->fs[pipe_tex][writemask] = >> + ctx->fs[pipe_tex][writemask][idx] = >> util_make_fragment_tex_shader_writemask(ctx->pipe, tgsi_tex, >> >> TGSI_INTERPOLATE_LINEAR, >> - writemask); >> + writemask, >> + stype); >> } >> >> - cso_set_fragment_shader_handle(ctx->cso, >> ctx->fs[pipe_tex][writemask]); >> + cso_set_fragment_shader_handle(ctx->cso, >> ctx->fs[pipe_tex][writemask][idx]); >> } >> >> >> @@ -571,6 +589,7 @@ util_blit_pixels_tex(struct blit_state *ctx, >> >> /* shaders */ >> set_fragment_shader(ctx, TGSI_WRITEMASK_XYZW, >> + src_sampler_view->format, >> src_sampler_view->texture->target); >> set_vertex_shader(ctx); >> cso_set_tessctrl_shader_handle(ctx->cso, NULL); >> diff --git a/src/gallium/auxiliary/util/u_blitter.c >> b/src/gallium/auxiliary/util/u_blitter.c >> index 16bf90f..5dfe2c7 100644 >> --- a/src/gallium/auxiliary/util/u_blitter.c >> +++ b/src/gallium/auxiliary/util/u_blitter.c >> @@ -81,6 +81,8 @@ struct blitter_context_priv >> /* FS which outputs a color from a texture, >> where the index is PIPE_TEXTURE_* to be sampled. */ >> void *fs_texfetch_col[PIPE_MAX_TEXTURE_TYPES]; >> + void *fs_texfetch_col_uint[PIPE_MAX_TEXTURE_TYPES]; >> + void *fs_texfetch_col_sint[PIPE_MAX_TEXTURE_TYPES]; >> >> /* FS which outputs a depth from a texture, >> where the index is PIPE_TEXTURE_* to be sampled. */ >> @@ -90,6 +92,8 @@ struct blitter_context_priv >> >> /* FS which outputs one sample from a multisample texture. */ >> void *fs_texfetch_col_msaa[PIPE_MAX_TEXTURE_TYPES]; >> + void *fs_texfetch_col_msaa_uint[PIPE_MAX_TEXTURE_TYPES]; >> + void *fs_texfetch_col_msaa_sint[PIPE_MAX_TEXTURE_TYPES]; >> void *fs_texfetch_depth_msaa[PIPE_MAX_TEXTURE_TYPES]; >> void *fs_texfetch_depthstencil_msaa[PIPE_MAX_TEXTURE_TYPES]; >> void *fs_texfetch_stencil_msaa[PIPE_MAX_TEXTURE_TYPES]; >> @@ -438,6 +442,10 @@ void util_blitter_destroy(struct blitter_context >> *blitter) >> for (i = 0; i < PIPE_MAX_TEXTURE_TYPES; i++) { >> if (ctx->fs_texfetch_col[i]) >> ctx->delete_fs_state(pipe, ctx->fs_texfetch_col[i]); >> + if (ctx->fs_texfetch_col_sint[i]) >> + ctx->delete_fs_state(pipe, ctx->fs_texfetch_col_sint[i]); >> + if (ctx->fs_texfetch_col_uint[i]) >> + ctx->delete_fs_state(pipe, ctx->fs_texfetch_col_uint[i]); >> if (ctx->fs_texfetch_depth[i]) >> ctx->delete_fs_state(pipe, ctx->fs_texfetch_depth[i]); >> if (ctx->fs_texfetch_depthstencil[i]) >> @@ -447,6 +455,10 @@ void util_blitter_destroy(struct blitter_context >> *blitter) >> >> if (ctx->fs_texfetch_col_msaa[i]) >> ctx->delete_fs_state(pipe, ctx->fs_texfetch_col_msaa[i]); >> + if (ctx->fs_texfetch_col_msaa_sint[i]) >> + ctx->delete_fs_state(pipe, ctx->fs_texfetch_col_msaa_sint[i]); >> + if (ctx->fs_texfetch_col_msaa_uint[i]) >> + ctx->delete_fs_state(pipe, ctx->fs_texfetch_col_msaa_uint[i]); >> if (ctx->fs_texfetch_depth_msaa[i]) >> ctx->delete_fs_state(pipe, ctx->fs_texfetch_depth_msaa[i]); >> if (ctx->fs_texfetch_depthstencil_msaa[i]) >> @@ -844,25 +856,29 @@ static void *blitter_get_fs_texfetch_col(struct >> blitter_context_priv *ctx, >> { >> struct pipe_context *pipe = ctx->base.pipe; >> unsigned tgsi_tex = util_pipe_tex_to_tgsi_tex(target, >> src_nr_samples); >> + enum tgsi_return_type stype; >> >> assert(target < PIPE_MAX_TEXTURE_TYPES); >> >> + if (util_format_is_pure_uint(format)) >> + stype = TGSI_RETURN_TYPE_UINT; >> + else if (util_format_is_pure_sint(format)) >> + stype = TGSI_RETURN_TYPE_SINT; >> + else >> + stype = TGSI_RETURN_TYPE_FLOAT; >> + > > > Need to indent with spaces, not tabs.
oh, whoops.. I apparently shouldn't be trying to carry on a conversation while preparing patches.. I'll fix this up locally but I don't think there is any point to resend unless other review comments.. that said, I've been trying to find a good way to test the draw module changes (w/ ST_DEBUG=tgsi to verify resulting shader) with llvmpipe (since the hw drivers I have access to don't use draw).. not sure if ST_DEBUG=tgsi is only dumping out the shader before draw modifies it? Or if I'm just not running the right piglit tests.. suggestions welcome BR, -R > -Brian > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev