[prev in list] [next in list] [prev in thread] [next in thread] 

List:       mesa3d-dev
Subject:    Re: [Mesa-dev] [PATCH 06/25] i965: Hook up image state upload.
From:       Paul Berry <stereotype441 () gmail ! com>
Date:       2013-12-31 2:07:53
Message-ID: CA+yLL66E5QZz-wXydegxt8w8nBiL=HhNPXPOwmxUDRPxuO9yRw () mail ! gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


On 2 December 2013 11:39, Francisco Jerez <currojerez@riseup.net> wrote:

> ---
>  src/mesa/drivers/dri/i965/brw_context.h          |  2 +
>  src/mesa/drivers/dri/i965/brw_gs_surface_state.c | 24 ++++++++++++
>  src/mesa/drivers/dri/i965/brw_state.h            |  3 ++
>  src/mesa/drivers/dri/i965/brw_state_upload.c     |  6 +++
>  src/mesa/drivers/dri/i965/brw_vs_surface_state.c | 24 ++++++++++++
>  src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 50
> ++++++++++++++++++++++++
>  6 files changed, 109 insertions(+)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_context.h
> b/src/mesa/drivers/dri/i965/brw_context.h
> index dc606c0f..4586005 100644
> --- a/src/mesa/drivers/dri/i965/brw_context.h
> +++ b/src/mesa/drivers/dri/i965/brw_context.h
> @@ -181,6 +181,7 @@ enum brw_state_id {
>     BRW_STATE_STATS_WM,
>     BRW_STATE_UNIFORM_BUFFER,
>     BRW_STATE_ATOMIC_BUFFER,
> +   BRW_STATE_IMAGE_UNITS,
>     BRW_STATE_META_IN_PROGRESS,
>     BRW_STATE_INTERPOLATION_MAP,
>     BRW_STATE_PUSH_CONSTANT_ALLOCATION,
> @@ -220,6 +221,7 @@ enum brw_state_id {
>  #define BRW_NEW_STATS_WM               (1 << BRW_STATE_STATS_WM)
>  #define BRW_NEW_UNIFORM_BUFFER          (1 << BRW_STATE_UNIFORM_BUFFER)
>  #define BRW_NEW_ATOMIC_BUFFER           (1 << BRW_STATE_ATOMIC_BUFFER)
> +#define BRW_NEW_IMAGE_UNITS             (1 << BRW_STATE_IMAGE_UNITS)
>  #define BRW_NEW_META_IN_PROGRESS        (1 << BRW_STATE_META_IN_PROGRESS)
>  #define BRW_NEW_INTERPOLATION_MAP       (1 << BRW_STATE_INTERPOLATION_MAP)
>  #define BRW_NEW_PUSH_CONSTANT_ALLOCATION (1 <<
> BRW_STATE_PUSH_CONSTANT_ALLOCATION)
> diff --git a/src/mesa/drivers/dri/i965/brw_gs_surface_state.c
> b/src/mesa/drivers/dri/i965/brw_gs_surface_state.c
> index 5661941..6db061d 100644
> --- a/src/mesa/drivers/dri/i965/brw_gs_surface_state.c
> +++ b/src/mesa/drivers/dri/i965/brw_gs_surface_state.c
> @@ -110,3 +110,27 @@ const struct brw_tracked_state brw_gs_abo_surfaces = {
>     },
>     .emit = brw_upload_gs_abo_surfaces,
>  };
> +
> +static void
> +brw_upload_gs_image_surfaces(struct brw_context *brw)
> +{
> +   struct gl_context *ctx = &brw->ctx;
> +   /* _NEW_PROGRAM */
> +   struct gl_shader_program *prog = ctx->Shader.CurrentGeometryProgram;
>

Since you only need the geometry program here, you can depend on
BRW_NEW_GEOMETRY_PROGRAM instead of _NEW_PROGRAM, and avoid this function
getting called unnecessarily when the geometry shader doesn't change (e.g.
when switching between two programs that don't contain a geometry shader).

A similar improvement cound be made in the vs and fs cases, but the benefit
is less (since nearly all programs contain a vertex and a fragment shader).

It's not a huge deal, though.  Either way, the patch is:

Reviewed-by: Paul Berry <stereotype441@gmail.com>

[Attachment #5 (text/html)]

<div dir="ltr">On 2 December 2013 11:39, Francisco Jerez <span dir="ltr">&lt;<a \
href="mailto:currojerez@riseup.net" \
target="_blank">currojerez@riseup.net</a>&gt;</span> wrote:<br><div \
class="gmail_extra"><div class="gmail_quote"> <blockquote class="gmail_quote" \
style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">---<br>  \
src/mesa/drivers/dri/i965/brw_context.h          |  2 +<br>  \
src/mesa/drivers/dri/i965/brw_gs_surface_state.c | 24 ++++++++++++<br>  \
src/mesa/drivers/dri/i965/brw_state.h            |  3 ++<br>  \
src/mesa/drivers/dri/i965/brw_state_upload.c     |  6 +++<br>  \
src/mesa/drivers/dri/i965/brw_vs_surface_state.c | 24 ++++++++++++<br>  \
src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 50 ++++++++++++++++++++++++<br>  6 \
files changed, 109 insertions(+)<br> <br>
diff --git a/src/mesa/drivers/dri/i965/brw_context.h \
b/src/mesa/drivers/dri/i965/brw_context.h<br> index dc606c0f..4586005 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_context.h<br>
+++ b/src/mesa/drivers/dri/i965/brw_context.h<br>
@@ -181,6 +181,7 @@ enum brw_state_id {<br>
    BRW_STATE_STATS_WM,<br>
    BRW_STATE_UNIFORM_BUFFER,<br>
    BRW_STATE_ATOMIC_BUFFER,<br>
+   BRW_STATE_IMAGE_UNITS,<br>
    BRW_STATE_META_IN_PROGRESS,<br>
    BRW_STATE_INTERPOLATION_MAP,<br>
    BRW_STATE_PUSH_CONSTANT_ALLOCATION,<br>
@@ -220,6 +221,7 @@ enum brw_state_id {<br>
 #define BRW_NEW_STATS_WM               (1 &lt;&lt; BRW_STATE_STATS_WM)<br>
 #define BRW_NEW_UNIFORM_BUFFER          (1 &lt;&lt; BRW_STATE_UNIFORM_BUFFER)<br>
 #define BRW_NEW_ATOMIC_BUFFER           (1 &lt;&lt; BRW_STATE_ATOMIC_BUFFER)<br>
+#define BRW_NEW_IMAGE_UNITS             (1 &lt;&lt; BRW_STATE_IMAGE_UNITS)<br>
 #define BRW_NEW_META_IN_PROGRESS        (1 &lt;&lt; BRW_STATE_META_IN_PROGRESS)<br>
 #define BRW_NEW_INTERPOLATION_MAP       (1 &lt;&lt; BRW_STATE_INTERPOLATION_MAP)<br>
 #define BRW_NEW_PUSH_CONSTANT_ALLOCATION (1 &lt;&lt; \
                BRW_STATE_PUSH_CONSTANT_ALLOCATION)<br>
diff --git a/src/mesa/drivers/dri/i965/brw_gs_surface_state.c \
b/src/mesa/drivers/dri/i965/brw_gs_surface_state.c<br> index 5661941..6db061d \
                100644<br>
--- a/src/mesa/drivers/dri/i965/brw_gs_surface_state.c<br>
+++ b/src/mesa/drivers/dri/i965/brw_gs_surface_state.c<br>
@@ -110,3 +110,27 @@ const struct brw_tracked_state brw_gs_abo_surfaces = {<br>
    },<br>
    .emit = brw_upload_gs_abo_surfaces,<br>
 };<br>
+<br>
+static void<br>
+brw_upload_gs_image_surfaces(struct brw_context *brw)<br>
+{<br>
+   struct gl_context *ctx = &amp;brw-&gt;ctx;<br>
+   /* _NEW_PROGRAM */<br>
+   struct gl_shader_program *prog = \
ctx-&gt;Shader.CurrentGeometryProgram;<br></blockquote><div><br></div><div>Since you \
only need the geometry program here, you can depend on BRW_NEW_GEOMETRY_PROGRAM \
instead of _NEW_PROGRAM, and avoid this function getting called unnecessarily when \
the geometry shader doesn&#39;t change (e.g. when switching between two programs that \
don&#39;t contain a geometry shader).<br> <br></div><div>A similar improvement cound \
be made in the vs and fs cases, but the benefit is less (since nearly all programs \
contain a vertex and a fragment shader).<br><br></div><div>It&#39;s not a huge deal, \
though.  Either way, the patch is:<br> <br>Reviewed-by: Paul Berry &lt;<a \
href="mailto:stereotype441@gmail.com">stereotype441@gmail.com</a>&gt;<br></div></div></div></div>




_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic