Re: [Mesa-dev] [PATCH 17/22] i965: Bind UBOs as surfaces like we do for pull constants.

2012-08-06 Thread Eric Anholt
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.

2012-08-01 Thread Kenneth Graunke
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.

2012-07-31 Thread Eric Anholt
---
 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,