Re: [Mesa-dev] [PATCH 17/22] i965: Bind UBOs as surfaces like we do for pull constants.
Kenneth Graunke kenn...@whitecape.org writes: On 07/31/2012 03:01 PM, Eric Anholt wrote: +const struct brw_tracked_state brw_vs_ubo_surfaces = { + .dirty = { + .mesa = (_NEW_PROGRAM | + _NEW_BUFFER_OBJECT), + .brw = (BRW_NEW_BATCH), You don't actually need the extra parenthesis...IMHO, .foo = bits | morebits | yetmorebits, .bar = ... is already quite readable, and definitely unambiguous (the = and , are clear delimiters). Not a big deal either way though. Yeah, just an artifact of how I copied some other struct and kept dropping flags out of the middle of the parens. Fixed. pgpQxPIgig7na.pgp Description: PGP signature ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH 17/22] i965: Bind UBOs as surfaces like we do for pull constants.
On 07/31/2012 03:01 PM, Eric Anholt wrote: --- src/mesa/drivers/dri/i965/brw_context.h | 22 +++- src/mesa/drivers/dri/i965/brw_state.h|2 + src/mesa/drivers/dri/i965/brw_state_upload.c |4 ++ src/mesa/drivers/dri/i965/brw_vs.c |2 +- src/mesa/drivers/dri/i965/brw_vs_surface_state.c | 24 + src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 59 ++ 6 files changed, 110 insertions(+), 3 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h index 8a082ab..7414732 100644 --- a/src/mesa/drivers/dri/i965/brw_context.h +++ b/src/mesa/drivers/dri/i965/brw_context.h @@ -493,6 +493,9 @@ struct brw_vs_ouput_sizes { /** Maximum number of actual buffers used for stream output */ #define BRW_MAX_SOL_BUFFERS 4 +#define BRW_MAX_WM_UBOS 12 +#define BRW_MAX_VS_UBOS 12 + /** * Helpers to create Surface Binding Table indexes for draw buffers, * textures, and constant buffers. @@ -518,6 +521,11 @@ struct brw_vs_ouput_sizes { *| . | . | *| : | : | *| 24 | Texture 15 | + *|-|-| + *| 25 | UBO 0 | + *| . | . | + *| : | : | + *| 36 | UBO 11 | *+---+ * * Our VS binding tables are programmed as follows: @@ -529,6 +537,11 @@ struct brw_vs_ouput_sizes { *| . | . | *| : | : | *| 16 | Texture 15 | + *+-+-+ + *| 17 | UBO 0 | + *| . | . | + *| : | : | + *| 28 | UBO 15 | You mean UBO 11 here (cut paste error from Texture 15 above). *+---+ * * Our (gen6) GS binding tables are programmed as follows: @@ -547,13 +560,15 @@ struct brw_vs_ouput_sizes { #define SURF_INDEX_DRAW(d) (d) #define SURF_INDEX_FRAG_CONST_BUFFER (BRW_MAX_DRAW_BUFFERS + 1) #define SURF_INDEX_TEXTURE(t)(BRW_MAX_DRAW_BUFFERS + 2 + (t)) +#define SURF_INDEX_WM_UBO(u) (SURF_INDEX_TEXTURE(BRW_MAX_TEX_UNIT) + u) /** Maximum size of the binding table. */ -#define BRW_MAX_WM_SURFACES SURF_INDEX_TEXTURE(BRW_MAX_TEX_UNIT) +#define BRW_MAX_WM_SURFACES SURF_INDEX_WM_UBO(BRW_MAX_WM_UBOS) #define SURF_INDEX_VERT_CONST_BUFFER (0) #define SURF_INDEX_VS_TEXTURE(t) (SURF_INDEX_VERT_CONST_BUFFER + 1 + (t)) -#define BRW_MAX_VS_SURFACES SURF_INDEX_VS_TEXTURE(BRW_MAX_TEX_UNIT) +#define SURF_INDEX_VS_UBO(u) (SURF_INDEX_VS_TEXTURE(BRW_MAX_TEX_UNIT) + u) +#define BRW_MAX_VS_SURFACES SURF_INDEX_VS_UBO(BRW_MAX_VS_UBOS) #define SURF_INDEX_SOL_BINDING(t)((t)) #define BRW_MAX_GS_SURFACES SURF_INDEX_SOL_BINDING(BRW_MAX_SOL_BINDINGS) @@ -1135,6 +1150,9 @@ brw_update_sol_surface(struct brw_context *brw, struct gl_buffer_object *buffer_obj, uint32_t *out_offset, unsigned num_vector_components, unsigned stride_dwords, unsigned offset_dwords); +void brw_upload_ubo_surfaces(struct brw_context *brw, + struct gl_shader *shader, + uint32_t *surf_offsets); /* gen6_sol.c */ void diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h index 8b99c52..2540cd5 100644 --- a/src/mesa/drivers/dri/i965/brw_state.h +++ b/src/mesa/drivers/dri/i965/brw_state.h @@ -71,6 +71,7 @@ extern const struct brw_tracked_state brw_state_base_address; extern const struct brw_tracked_state brw_urb_fence; extern const struct brw_tracked_state brw_vertex_state; extern const struct brw_tracked_state brw_vs_prog; +extern const struct brw_tracked_state brw_vs_ubo_surfaces; extern const struct brw_tracked_state brw_vs_unit; extern const struct brw_tracked_state brw_wm_input_sizes; extern const struct brw_tracked_state brw_wm_prog; @@ -78,6 +79,7 @@ extern const struct brw_tracked_state brw_renderbuffer_surfaces; extern const struct brw_tracked_state brw_texture_surfaces; extern const struct brw_tracked_state brw_wm_binding_table; extern const struct brw_tracked_state brw_vs_binding_table; +extern const struct brw_tracked_state brw_wm_ubo_surfaces; extern const struct brw_tracked_state brw_wm_unit; extern const struct brw_tracked_state brw_psp_urb_cbs; diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c index 12535ed..c3e6de4 100644 --- a/src/mesa/drivers/dri/i965/brw_state_upload.c +++ b/src/mesa/drivers/dri/i965/brw_state_upload.c @@
[Mesa-dev] [PATCH 17/22] i965: Bind UBOs as surfaces like we do for pull constants.
--- src/mesa/drivers/dri/i965/brw_context.h | 22 +++- src/mesa/drivers/dri/i965/brw_state.h|2 + src/mesa/drivers/dri/i965/brw_state_upload.c |4 ++ src/mesa/drivers/dri/i965/brw_vs.c |2 +- src/mesa/drivers/dri/i965/brw_vs_surface_state.c | 24 + src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 59 ++ 6 files changed, 110 insertions(+), 3 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h index 8a082ab..7414732 100644 --- a/src/mesa/drivers/dri/i965/brw_context.h +++ b/src/mesa/drivers/dri/i965/brw_context.h @@ -493,6 +493,9 @@ struct brw_vs_ouput_sizes { /** Maximum number of actual buffers used for stream output */ #define BRW_MAX_SOL_BUFFERS 4 +#define BRW_MAX_WM_UBOS 12 +#define BRW_MAX_VS_UBOS 12 + /** * Helpers to create Surface Binding Table indexes for draw buffers, * textures, and constant buffers. @@ -518,6 +521,11 @@ struct brw_vs_ouput_sizes { *| . | . | *| : | : | *| 24 | Texture 15 | + *|-|-| + *| 25 | UBO 0 | + *| . | . | + *| : | : | + *| 36 | UBO 11 | *+---+ * * Our VS binding tables are programmed as follows: @@ -529,6 +537,11 @@ struct brw_vs_ouput_sizes { *| . | . | *| : | : | *| 16 | Texture 15 | + *+-+-+ + *| 17 | UBO 0 | + *| . | . | + *| : | : | + *| 28 | UBO 15 | *+---+ * * Our (gen6) GS binding tables are programmed as follows: @@ -547,13 +560,15 @@ struct brw_vs_ouput_sizes { #define SURF_INDEX_DRAW(d) (d) #define SURF_INDEX_FRAG_CONST_BUFFER (BRW_MAX_DRAW_BUFFERS + 1) #define SURF_INDEX_TEXTURE(t)(BRW_MAX_DRAW_BUFFERS + 2 + (t)) +#define SURF_INDEX_WM_UBO(u) (SURF_INDEX_TEXTURE(BRW_MAX_TEX_UNIT) + u) /** Maximum size of the binding table. */ -#define BRW_MAX_WM_SURFACES SURF_INDEX_TEXTURE(BRW_MAX_TEX_UNIT) +#define BRW_MAX_WM_SURFACES SURF_INDEX_WM_UBO(BRW_MAX_WM_UBOS) #define SURF_INDEX_VERT_CONST_BUFFER (0) #define SURF_INDEX_VS_TEXTURE(t) (SURF_INDEX_VERT_CONST_BUFFER + 1 + (t)) -#define BRW_MAX_VS_SURFACES SURF_INDEX_VS_TEXTURE(BRW_MAX_TEX_UNIT) +#define SURF_INDEX_VS_UBO(u) (SURF_INDEX_VS_TEXTURE(BRW_MAX_TEX_UNIT) + u) +#define BRW_MAX_VS_SURFACES SURF_INDEX_VS_UBO(BRW_MAX_VS_UBOS) #define SURF_INDEX_SOL_BINDING(t)((t)) #define BRW_MAX_GS_SURFACES SURF_INDEX_SOL_BINDING(BRW_MAX_SOL_BINDINGS) @@ -1135,6 +1150,9 @@ brw_update_sol_surface(struct brw_context *brw, struct gl_buffer_object *buffer_obj, uint32_t *out_offset, unsigned num_vector_components, unsigned stride_dwords, unsigned offset_dwords); +void brw_upload_ubo_surfaces(struct brw_context *brw, +struct gl_shader *shader, +uint32_t *surf_offsets); /* gen6_sol.c */ void diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h index 8b99c52..2540cd5 100644 --- a/src/mesa/drivers/dri/i965/brw_state.h +++ b/src/mesa/drivers/dri/i965/brw_state.h @@ -71,6 +71,7 @@ extern const struct brw_tracked_state brw_state_base_address; extern const struct brw_tracked_state brw_urb_fence; extern const struct brw_tracked_state brw_vertex_state; extern const struct brw_tracked_state brw_vs_prog; +extern const struct brw_tracked_state brw_vs_ubo_surfaces; extern const struct brw_tracked_state brw_vs_unit; extern const struct brw_tracked_state brw_wm_input_sizes; extern const struct brw_tracked_state brw_wm_prog; @@ -78,6 +79,7 @@ extern const struct brw_tracked_state brw_renderbuffer_surfaces; extern const struct brw_tracked_state brw_texture_surfaces; extern const struct brw_tracked_state brw_wm_binding_table; extern const struct brw_tracked_state brw_vs_binding_table; +extern const struct brw_tracked_state brw_wm_ubo_surfaces; extern const struct brw_tracked_state brw_wm_unit; extern const struct brw_tracked_state brw_psp_urb_cbs; diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c index 12535ed..c3e6de4 100644 --- a/src/mesa/drivers/dri/i965/brw_state_upload.c +++ b/src/mesa/drivers/dri/i965/brw_state_upload.c @@ -143,7 +143,9 @@ static const struct brw_tracked_state *gen6_atoms[] = * table upload must be last. */ brw_vs_pull_constants, + brw_vs_ubo_surfaces, brw_wm_pull_constants, + brw_wm_ubo_surfaces,