<div dir="ltr">This doesn't work.  Well, I mean, it sort-of works.  At this point in the series, it will break things because Vulkan will start copying 8 dwords into your surface state and over-write the start of another surface state.  Later on, I'm sure it's all good because we no longer copy things around.  I haven't seen where you use it yet so I'm not sure what we should do.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Feb 21, 2018 at 1:45 PM, Rafael Antognolli <span dir="ltr"><<a href="mailto:rafael.antognolli@intel.com" target="_blank">rafael.antognolli@intel.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On gen10 and newer, there's a struct describing how to use the indirect<br>
clear color buffer, and it seems to be 8 dwords long - 4 for the clear<br>
color and the last 4 used by the hardware, apparently depending on the<br>
generation. So just set aside space for them since gen10.<br>
<br>
Optionally we can later add the struct to the genxml, though it wouldn't<br>
really be used for anything else other than calculating this size.<br>
<br>
[<a href="mailto:jordan.l.justen@intel.com">jordan.l.justen@intel.com</a>: isl_device_init changes]<br>
Signed-off-by: Rafael Antognolli <<a href="mailto:rafael.antognolli@intel.com">rafael.antognolli@intel.com</a>><br>
Signed-off-by: Jordan Justen <<a href="mailto:jordan.l.justen@intel.com">jordan.l.justen@intel.com</a>><br>
---<br>
 src/intel/isl/isl.c | 27 ++++++++++++++++++---------<br>
 1 file changed, 18 insertions(+), 9 deletions(-)<br>
<br>
diff --git a/src/intel/isl/isl.c b/src/intel/isl/isl.c<br>
index 1a32c028183..77641a89f86 100644<br>
--- a/src/intel/isl/isl.c<br>
+++ b/src/intel/isl/isl.c<br>
@@ -73,15 +73,24 @@ isl_device_init(struct isl_device *dev,<br>
    dev->ss.size = RENDER_SURFACE_STATE_length(<wbr>info) * 4;<br>
    dev->ss.align = isl_align(dev->ss.size, 32);<br>
<br>
-   dev->ss.clear_value_size =<br>
-      isl_align(RENDER_SURFACE_<wbr>STATE_RedClearColor_bits(info) +<br>
-                RENDER_SURFACE_STATE_<wbr>GreenClearColor_bits(info) +<br>
-                RENDER_SURFACE_STATE_<wbr>BlueClearColor_bits(info) +<br>
-                RENDER_SURFACE_STATE_<wbr>AlphaClearColor_bits(info), 32) / 8;<br>
-<br>
-   dev->ss.clear_value_offset =<br>
-      RENDER_SURFACE_STATE_<wbr>RedClearColor_start(info) / 32 * 4;<br>
-<br>
+   if (ISL_DEV_GEN(dev) >= 10) {<br>
+      /* Clear Color structure<br>
+       * - 4 dwords for the clear color<br>
+       * - 2 dwords that can be used by the hardware for converted clear color<br>
+       *   + some extra bits.<br>
+       */<br>
+      dev->ss.clear_value_size = 8 * 4;<br>
+      dev->ss.clear_value_offset =<br>
+         RENDER_SURFACE_STATE_<wbr>ClearValueAddress_start(info) / 32 * 4;<br>
+   } else {<br>
+      dev->ss.clear_value_size =<br>
+         isl_align(RENDER_SURFACE_<wbr>STATE_RedClearColor_bits(info) +<br>
+                   RENDER_SURFACE_STATE_<wbr>GreenClearColor_bits(info) +<br>
+                   RENDER_SURFACE_STATE_<wbr>BlueClearColor_bits(info) +<br>
+                   RENDER_SURFACE_STATE_<wbr>AlphaClearColor_bits(info), 32) / 8;<br>
+      dev->ss.clear_value_offset =<br>
+         RENDER_SURFACE_STATE_<wbr>RedClearColor_start(info) / 32 * 4;<br>
+   }<br>
    assert(RENDER_SURFACE_STATE_<wbr>SurfaceBaseAddress_start(info) % 8 == 0);<br>
    dev->ss.addr_offset =<br>
       RENDER_SURFACE_STATE_<wbr>SurfaceBaseAddress_start(info) / 8;<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.14.3<br>
<br>
______________________________<wbr>_________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div>