diff --git a/src/freedreno/computerator/a6xx.c b/src/freedreno/computerator/a6xx.c index 657e83cfd82..f87c8434b84 100644 --- a/src/freedreno/computerator/a6xx.c +++ b/src/freedreno/computerator/a6xx.c @@ -317,8 +317,9 @@ cs_ibo_emit(struct fd_ringbuffer *ring, struct fd_submit *submit, OUT_RING(state, A6XX_TEX_CONST_0_FMT(FMT6_32_UINT) | A6XX_TEX_CONST_0_TILE_MODE(0)); OUT_RING(state, A6XX_TEX_CONST_1_WIDTH(width) | A6XX_TEX_CONST_1_HEIGHT(height)); - OUT_RING(state, A6XX_TEX_CONST_2_PITCH(0) | A6XX_TEX_CONST_2_BUFFER | - A6XX_TEX_CONST_2_TYPE(A6XX_TEX_BUFFER)); + OUT_RING(state, A6XX_TEX_CONST_2_PITCH(0) | + A6XX_TEX_CONST_2_STRUCTSIZETEXELS(1) | + A6XX_TEX_CONST_2_TYPE(A6XX_TEX_BUFFER)); OUT_RING(state, A6XX_TEX_CONST_3_ARRAY_PITCH(0)); OUT_RELOC(state, kernel->bufs[i], 0, 0, 0); OUT_RING(state, 0x00000000); diff --git a/src/freedreno/fdl/fd6_view.c b/src/freedreno/fdl/fd6_view.c index 456eff57aca..b8236a75324 100644 --- a/src/freedreno/fdl/fd6_view.c +++ b/src/freedreno/fdl/fd6_view.c @@ -449,7 +449,7 @@ fdl6_buffer_view_init(uint32_t *descriptor, enum pipe_format format, COND(util_format_is_srgb(format), A6XX_TEX_CONST_0_SRGB); descriptor[1] = A6XX_TEX_CONST_1_WIDTH(elements & ((1 << 15) - 1)) | A6XX_TEX_CONST_1_HEIGHT(elements >> 15); - descriptor[2] = A6XX_TEX_CONST_2_BUFFER | + descriptor[2] = A6XX_TEX_CONST_2_STRUCTSIZETEXELS(1) | A6XX_TEX_CONST_2_TYPE(A6XX_TEX_BUFFER); descriptor[4] = iova; descriptor[5] = iova >> 32; diff --git a/src/freedreno/registers/adreno/a6xx.xml b/src/freedreno/registers/adreno/a6xx.xml index 3658648c074..a569f9bedc8 100644 --- a/src/freedreno/registers/adreno/a6xx.xml +++ b/src/freedreno/registers/adreno/a6xx.xml @@ -3852,13 +3852,13 @@ to upconvert to 32b float internally? - + probably for D3D structured UAVs, normally set to 1 + + + Pitch in bytes (so actually stride) diff --git a/src/freedreno/vulkan/tu_descriptor_set.c b/src/freedreno/vulkan/tu_descriptor_set.c index 80ca1abdd0e..eb279d74c39 100644 --- a/src/freedreno/vulkan/tu_descriptor_set.c +++ b/src/freedreno/vulkan/tu_descriptor_set.c @@ -1046,7 +1046,7 @@ write_buffer_descriptor_addr(const struct tu_device *device, dst[1] = DIV_ROUND_UP(range, 4); } dst[2] = - A6XX_TEX_CONST_2_BUFFER | A6XX_TEX_CONST_2_TYPE(A6XX_TEX_BUFFER); + A6XX_TEX_CONST_2_STRUCTSIZETEXELS(1) | A6XX_TEX_CONST_2_TYPE(A6XX_TEX_BUFFER); dst[3] = 0; dst[4] = A6XX_TEX_CONST_4_BASE_LO(va); dst[5] = A6XX_TEX_CONST_5_BASE_HI(va >> 32);