On Thu, 2010-03-11 at 03:16 -0800, michal wrote:
> Hi,
>
> I would like to merge the branch in subject this week. This feature
> branch allows state trackers to bind sampler views instead of textures
> to shader stages.
>
> A sampler view object holds a reference to a texture and also overrides
> internal texture format (resource casting) and specifies RGBA swizzle
> (needed for GL_EXT_texture_swizzle extension).
>
> Yesterday I had to merge master into gallium-sampler-view -- the nv50
> and r300 drivers had lots of conflicts. Could the maintainers of said
> drivers had a look at them and see if they are still functional, please?
>
> Thanks.
Michal,
Looks good overall. Minor comments below. Sorry if I rehash things that
have been already discussed. Feel free to ignore them.
diff --git a/src/gallium/include/pipe/p_state.h
b/src/gallium/include/pipe/p_state.h
index 3a97d88..3c7c0a5 100644
--- a/src/gallium/include/pipe/p_state.h
+++ b/src/gallium/include/pipe/p_state.h
@@ -300,6 +300,24 @@ struct pipe_surface
/**
+ * A view into a texture that can be bound to a shader stage.
+ */
+struct pipe_sampler_view
+{
+ struct pipe_reference reference;
+ enum pipe_format format; /**< typed PIPE_FORMAT_x */
I think it is worth to document that not all formats are valid here.
pipe_sampler_view::format and pipe_texture::format must be compatible.
The semantics of compatibility are a bit confusing though. Even DX10's.
At very least format's util_format_block must match.
RGB <=> SRGB variations should also be accepted. And sizzwle variations.
The difficulty is whether formats like A4R4G4B4 <=> A1G5R5B5 or
R8G8B8A8 <=> R32 should be accepted. I think hardware should have no
troubles with typecasting. So I'm inclined towards make this acceptible.
+ struct pipe_texture *texture; /**< texture into which this is a view */
+ struct pipe_context *context; /**< context this view belongs to */
Is this for debugging? No other state object has a pointer to context so far.
+ unsigned first_level:8; /**< first mipmap level */
+ unsigned num_levels:8; /**< number of mipamp levels */
I don't care much, but we've been using last_level instead of num_levels
elsewhere. Is there a particular reason to use num_levels here?
s/mipamp/mipmap/ in comment.
+ unsigned swizzle_r:3; /**< PIPE_SWIZZLE_x for red component */
+ unsigned swizzle_g:3; /**< PIPE_SWIZZLE_x for green component */
+ unsigned swizzle_b:3; /**< PIPE_SWIZZLE_x for blue component */
+ unsigned swizzle_a:3; /**< PIPE_SWIZZLE_x for alpha component */
+};
+
+
+/**
* Transfer object. For data transfer to/from a texture.
*/
struct pipe_transfer
diff --git a/src/gallium/drivers/llvmpipe/lp_state_sampler.c
b/src/gallium/drivers/llvmpipe/lp_state_sampler.c
index b30a075..2df86a0 100644
--- a/src/gallium/drivers/llvmpipe/lp_state_sampler.c
+++ b/src/gallium/drivers/llvmpipe/lp_state_sampler.c
[...]
> +struct pipe_sampler_view *
> +llvmpipe_create_sampler_view(struct pipe_context *pipe,
> + struct pipe_texture *texture,
> + const struct pipe_sampler_view *templ)
> +{
> + struct pipe_sampler_view *view = CALLOC_STRUCT(pipe_sampler_view);
Need to handle out of memory here.
> + *view = *templ;
> + view->reference.count = 1;
> + view->texture = NULL;
> + pipe_texture_reference(&view->texture, texture);
> + view->context = pipe;
> +
> + return view;
> +}
The rest looks great to me. It's a very useful gallium interface change.
I particularly like how you eased migration with
cso_set_sampler_textures().
BTW, I noticed you commented out pipe video code. Everybody agreed on
removing it from master and mature pipe video on a branch, but we never
got around to do it. I'll remove this code in the next few days.
Jose
------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Mesa3d-dev mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev