Untyped Atomic Operation messages are illegal for non-RAW formats.
I have no idea why it worked before; the documentation claims it
shouldn't be allowed and the simulator enforces it.

Some arithmetic sleight of hand happens in this patch:

Previously, we allocated a R32G32B32A32 buffer.  However, atomic
operations only access the first DWord (the 'R' channel).  Thus, we
multiplied all of our offsets (measured in DWords) by 4 to skip over
the other three channels.

Now, we allocate a single component (effectively R32) buffer,
eliminating the wasted space.  Using the RAW format means that our
offsets must be measured in bytes (and must be DWord-aligned).  This
means that the multiplication by 4 is still necessary.  However, instead
of skipping over the BGA components, it converts DWords to bytes.

We ought to change the size of the buffer, but I'm pretty sure it was
just wrong before: brw->shader_time.bo->size is measured in bytes, so
we were allocating it too large in the past.

NOTE: This is a candidate for the 9.1 branch.
Cc: Eric Anholt <e...@anholt.net>
Signed-off-by: Kenneth Graunke <kenn...@whitecape.org>
---
 src/mesa/drivers/dri/i965/brw_defines.h           | 1 +
 src/mesa/drivers/dri/i965/gen7_wm_surface_state.c | 5 ++---
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_defines.h 
b/src/mesa/drivers/dri/i965/brw_defines.h
index 849d127..6652cad 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -437,6 +437,7 @@
 #define BRW_SURFACEFORMAT_B10G10R10A2_SSCALED            0x1B9
 #define BRW_SURFACEFORMAT_B10G10R10A2_UINT               0x1BA
 #define BRW_SURFACEFORMAT_B10G10R10A2_SINT               0x1BB
+#define BRW_SURFACEFORMAT_RAW                            0x1FF
 #define BRW_SURFACE_FORMAT_SHIFT       18
 #define BRW_SURFACE_FORMAT_MASK                INTEL_MASK(26, 18)
 
diff --git a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c 
b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
index 6a4c009..5cf9da0 100644
--- a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
@@ -435,15 +435,14 @@ gen7_create_shader_time_surface(struct brw_context *brw, 
uint32_t *out_offset)
                                     8 * 4, 32, out_offset);
 
    surf[0] = BRW_SURFACE_BUFFER << BRW_SURFACE_TYPE_SHIFT |
-             BRW_SURFACEFORMAT_R32G32B32A32_FLOAT << BRW_SURFACE_FORMAT_SHIFT |
+             BRW_SURFACEFORMAT_RAW << BRW_SURFACE_FORMAT_SHIFT |
              BRW_SURFACE_RC_READ_WRITE;
 
    surf[1] = brw->shader_time.bo->offset; /* reloc */
 
    surf[2] = SET_FIELD(w & 0x7f, GEN7_SURFACE_WIDTH) |
              SET_FIELD((w >> 7) & 0x1fff, GEN7_SURFACE_HEIGHT);
-   surf[3] = SET_FIELD((w >> 20) & 0x7f, BRW_SURFACE_DEPTH) |
-             (16 - 1); /* stride between samples */
+   surf[3] = SET_FIELD((w >> 20) & 0x7f, BRW_SURFACE_DEPTH);
 
    /* Emit relocation to surface contents.  Section 5.1.1 of the gen4
     * bspec ("Data Cache") says that the data cache does not exist as
-- 
1.8.1.1

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

Reply via email to