Created
December 28, 2019 00:24
-
-
Save anarsoul/c59d359b521cdfdebc308c173aa1ee85 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_gather.c b/src/gallium/auxiliary/gallivm/lp_bld_gather.c | |
index e991b0dc375..4686a94d314 100644 | |
--- a/src/gallium/auxiliary/gallivm/lp_bld_gather.c | |
+++ b/src/gallium/auxiliary/gallivm/lp_bld_gather.c | |
@@ -105,7 +105,7 @@ lp_build_gather_elem(struct gallivm_state *gallivm, | |
* two >= 32). On x86 it doesn't matter, however. | |
* We should be able to guarantee full alignment for any kind of texture | |
* fetch (except ARB_texture_buffer_range, oops), but not vertex fetch | |
- * (there's PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY and friends | |
+ * (there's PIPE_CAP_VERTEX_BUFFER_OFFSET_ALIGNMENT and friends | |
* but I don't think that's quite what we wanted). | |
* For ARB_texture_buffer_range, PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT | |
* looks like a good fit, but it seems this cap bit (and OpenGL) aren't | |
@@ -186,7 +186,7 @@ lp_build_gather_elem_vec(struct gallivm_state *gallivm, | |
* two >= 32). On x86 it doesn't matter, however. | |
* We should be able to guarantee full alignment for any kind of texture | |
* fetch (except ARB_texture_buffer_range, oops), but not vertex fetch | |
- * (there's PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY and friends | |
+ * (there's PIPE_CAP_VERTEX_BUFFER_OFFSET_ALIGNMENT and friends | |
* but I don't think that's quite what we wanted). | |
* For ARB_texture_buffer_range, PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT | |
* looks like a good fit, but it seems this cap bit (and OpenGL) aren't | |
diff --git a/src/gallium/auxiliary/util/u_screen.c b/src/gallium/auxiliary/util/u_screen.c | |
index 70eb4a27d74..0b6297f14ba 100644 | |
--- a/src/gallium/auxiliary/util/u_screen.c | |
+++ b/src/gallium/auxiliary/util/u_screen.c | |
@@ -116,12 +116,12 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen, | |
case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION: | |
case PIPE_CAP_USER_VERTEX_BUFFERS: | |
- case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY: | |
case PIPE_CAP_COMPUTE: | |
return 0; | |
+ case PIPE_CAP_VERTEX_BUFFER_OFFSET_ALIGNMENT: | |
+ case PIPE_CAP_VERTEX_BUFFER_STRIDE_ALIGNMENT: | |
+ case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_ALIGNMENT: | |
case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT: | |
/* GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT default value. */ | |
return 1; | |
diff --git a/src/gallium/auxiliary/util/u_vbuf.c b/src/gallium/auxiliary/util/u_vbuf.c | |
index a8b57aafed3..e493384c64f 100644 | |
--- a/src/gallium/auxiliary/util/u_vbuf.c | |
+++ b/src/gallium/auxiliary/util/u_vbuf.c | |
@@ -279,15 +279,15 @@ boolean u_vbuf_get_caps(struct pipe_screen *screen, struct u_vbuf_caps *caps, | |
} | |
} | |
- caps->buffer_offset_unaligned = | |
- !screen->get_param(screen, | |
- PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY); | |
- caps->buffer_stride_unaligned = | |
- !screen->get_param(screen, | |
- PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY); | |
- caps->velem_src_offset_unaligned = | |
- !screen->get_param(screen, | |
- PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY); | |
+ caps->buffer_offset_alignment = | |
+ screen->get_param(screen, | |
+ PIPE_CAP_VERTEX_BUFFER_OFFSET_ALIGNMENT); | |
+ caps->buffer_stride_alignment = | |
+ screen->get_param(screen, | |
+ PIPE_CAP_VERTEX_BUFFER_STRIDE_ALIGNMENT); | |
+ caps->velem_src_offset_alignment = | |
+ screen->get_param(screen, | |
+ PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_ALIGNMENT); | |
caps->user_vertex_buffers = | |
screen->get_param(screen, PIPE_CAP_USER_VERTEX_BUFFERS); | |
caps->max_vertex_buffers = | |
@@ -297,9 +297,9 @@ boolean u_vbuf_get_caps(struct pipe_screen *screen, struct u_vbuf_caps *caps, | |
if (caps->max_vertex_buffers < 16) | |
fallback = TRUE; | |
- if (!caps->buffer_offset_unaligned || | |
- !caps->buffer_stride_unaligned || | |
- !caps->velem_src_offset_unaligned || | |
+ if (caps->buffer_offset_alignment != 1 || | |
+ caps->buffer_stride_alignment != 1 || | |
+ caps->velem_src_offset_alignment != 1|| | |
(!(flags & U_VBUF_FLAG_NO_USER_VBOS) && !caps->user_vertex_buffers)) { | |
fallback = TRUE; | |
} | |
@@ -812,8 +812,7 @@ u_vbuf_create_vertex_elements(struct u_vbuf *mgr, unsigned count, | |
util_format_get_blocksize(ve->native_format[i]); | |
if (ve->ve[i].src_format != format || | |
- (!mgr->caps.velem_src_offset_unaligned && | |
- ve->ve[i].src_offset % 4 != 0)) { | |
+ (ve->ve[i].src_offset % mgr->caps.velem_src_offset_alignment)) { | |
ve->incompatible_elem_mask |= 1 << i; | |
ve->incompatible_vb_mask_any |= 1 << ve->ve[i].vertex_buffer_index; | |
} else { | |
@@ -837,10 +836,12 @@ u_vbuf_create_vertex_elements(struct u_vbuf *mgr, unsigned count, | |
ve->incompatible_vb_mask_all = ~ve->compatible_vb_mask_any & used_buffers; | |
/* Align the formats and offsets to the size of DWORD if needed. */ | |
- if (!mgr->caps.velem_src_offset_unaligned) { | |
+ if (mgr->caps.velem_src_offset_alignment != 1) { | |
for (i = 0; i < count; i++) { | |
- ve->native_format_size[i] = align(ve->native_format_size[i], 4); | |
- driver_attribs[i].src_offset = align(ve->ve[i].src_offset, 4); | |
+ ve->native_format_size[i] = align(ve->native_format_size[i], | |
+ mgr->caps.velem_src_offset_alignment); | |
+ driver_attribs[i].src_offset = align(ve->ve[i].src_offset, | |
+ mgr->caps.velem_src_offset_alignment); | |
} | |
} | |
@@ -918,8 +919,8 @@ void u_vbuf_set_vertex_buffers(struct u_vbuf *mgr, | |
} | |
enabled_vb_mask |= 1 << dst_index; | |
- if ((!mgr->caps.buffer_offset_unaligned && vb->buffer_offset % 4 != 0) || | |
- (!mgr->caps.buffer_stride_unaligned && vb->stride % 4 != 0)) { | |
+ if ((vb->buffer_offset % mgr->caps.buffer_offset_alignment) || | |
+ (vb->stride % mgr->caps.buffer_stride_alignment)) { | |
incompatible_vb_mask |= 1 << dst_index; | |
real_vb->buffer_offset = vb->buffer_offset; | |
real_vb->stride = vb->stride; | |
diff --git a/src/gallium/auxiliary/util/u_vbuf.h b/src/gallium/auxiliary/util/u_vbuf.h | |
index 797fbb7681f..867e993df2a 100644 | |
--- a/src/gallium/auxiliary/util/u_vbuf.h | |
+++ b/src/gallium/auxiliary/util/u_vbuf.h | |
@@ -46,11 +46,9 @@ struct u_vbuf; | |
struct u_vbuf_caps { | |
enum pipe_format format_translation[PIPE_FORMAT_COUNT]; | |
- /* Whether vertex fetches don't have to be 4-byte-aligned. */ | |
- /* TRUE if hardware supports it. */ | |
- unsigned buffer_offset_unaligned:1; | |
- unsigned buffer_stride_unaligned:1; | |
- unsigned velem_src_offset_unaligned:1; | |
+ unsigned buffer_offset_alignment; | |
+ unsigned buffer_stride_alignment; | |
+ unsigned velem_src_offset_alignment; | |
/* Whether the driver supports user vertex buffers. */ | |
unsigned user_vertex_buffers:1; | |
diff --git a/src/gallium/docs/source/screen.rst b/src/gallium/docs/source/screen.rst | |
index 7e6964282f5..de1679da0fd 100644 | |
--- a/src/gallium/docs/source/screen.rst | |
+++ b/src/gallium/docs/source/screen.rst | |
@@ -124,15 +124,13 @@ The integer capabilities: | |
buffers. If not, the state tracker must upload all data which is not in hw | |
resources. If user-space buffers are supported, the driver must also still | |
accept HW resource buffers. | |
-* ``PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY``: This CAP describes a hw | |
- limitation. If true, pipe_vertex_buffer::buffer_offset must always be aligned | |
- to 4. If false, there are no restrictions on the offset. | |
-* ``PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY``: This CAP describes a hw | |
- limitation. If true, pipe_vertex_buffer::stride must always be aligned to 4. | |
+* ``PIPE_CAP_VERTEX_BUFFER_OFFSET_ALIGNMENT``: Describes hardware | |
+ alignment requirement of pipe_vertex_buffer::buffer_offset | |
+* ``PIPE_CAP_VERTEX_BUFFER_STRIDE_ALIGNMENT``: Describes hardware | |
+ alignment requirement of pipe_vertex_buffer::stride | |
If false, there are no restrictions on the stride. | |
-* ``PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY``: This CAP describes | |
- a hw limitation. If true, pipe_vertex_element::src_offset must always be | |
- aligned to 4. If false, there are no restrictions on src_offset. | |
+* ``PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_ALIGNMENT``: Describe hardware | |
+ alignment requirement of pipe_vertex_element::src_offset | |
* ``PIPE_CAP_COMPUTE``: Whether the implementation supports the | |
compute entry points defined in pipe_context and pipe_screen. | |
* ``PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT``: Describes the required | |
diff --git a/src/gallium/drivers/etnaviv/etnaviv_screen.c b/src/gallium/drivers/etnaviv/etnaviv_screen.c | |
index 75d3e1e6877..c5fb3a94443 100644 | |
--- a/src/gallium/drivers/etnaviv/etnaviv_screen.c | |
+++ b/src/gallium/drivers/etnaviv/etnaviv_screen.c | |
@@ -143,14 +143,17 @@ etna_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) | |
case PIPE_CAP_VERTEX_SHADER_SATURATE: | |
case PIPE_CAP_TEXTURE_BARRIER: | |
case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION: | |
- case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_TGSI_TEXCOORD: | |
case PIPE_CAP_VERTEX_COLOR_UNCLAMPED: | |
case PIPE_CAP_MIXED_COLOR_DEPTH_BITS: | |
case PIPE_CAP_MIXED_FRAMEBUFFER_SIZES: | |
return 1; | |
+ | |
+ case PIPE_CAP_VERTEX_BUFFER_OFFSET_ALIGNMENT: | |
+ case PIPE_CAP_VERTEX_BUFFER_STRIDE_ALIGNMENT: | |
+ case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_ALIGNMENT: | |
+ return 4; | |
+ | |
+ case PIPE_CAP_TGSI_TEXCOORD: | |
case PIPE_CAP_NATIVE_FENCE_FD: | |
return screen->drm_version >= ETNA_DRM_VERSION_FENCE_FD; | |
case PIPE_CAP_TGSI_FS_POSITION_IS_SYSVAL: | |
diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c b/src/gallium/drivers/freedreno/freedreno_screen.c | |
index d467cae6b00..6ba0231081e 100644 | |
--- a/src/gallium/drivers/freedreno/freedreno_screen.c | |
+++ b/src/gallium/drivers/freedreno/freedreno_screen.c | |
@@ -189,9 +189,6 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) | |
case PIPE_CAP_SEAMLESS_CUBE_MAP: | |
case PIPE_CAP_VERTEX_COLOR_UNCLAMPED: | |
case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION: | |
- case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY: | |
case PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT: | |
case PIPE_CAP_STRING_MARKER: | |
case PIPE_CAP_MIXED_COLOR_DEPTH_BITS: | |
@@ -199,6 +196,11 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) | |
case PIPE_CAP_INVALIDATE_BUFFER: | |
return 1; | |
+ case PIPE_CAP_VERTEX_BUFFER_OFFSET_ALIGNMENT: | |
+ case PIPE_CAP_VERTEX_BUFFER_STRIDE_ALIGNMENT: | |
+ case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_ALIGNMENT: | |
+ return 4; | |
+ | |
case PIPE_CAP_PACKED_UNIFORMS: | |
return !is_a2xx(screen); | |
diff --git a/src/gallium/drivers/i915/i915_screen.c b/src/gallium/drivers/i915/i915_screen.c | |
index a22eaa95abb..4209a2fe2a5 100644 | |
--- a/src/gallium/drivers/i915/i915_screen.c | |
+++ b/src/gallium/drivers/i915/i915_screen.c | |
@@ -300,9 +300,6 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap cap) | |
case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS: | |
case PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME: | |
case PIPE_CAP_STREAM_OUTPUT_INTERLEAVE_BUFFERS: | |
- case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY: | |
case PIPE_CAP_TGSI_VS_LAYER_VIEWPORT: | |
case PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT: | |
case PIPE_CAP_DRAW_INDIRECT: | |
diff --git a/src/gallium/drivers/lima/lima_screen.c b/src/gallium/drivers/lima/lima_screen.c | |
index 9610018115d..c34382eaafa 100644 | |
--- a/src/gallium/drivers/lima/lima_screen.c | |
+++ b/src/gallium/drivers/lima/lima_screen.c | |
@@ -143,6 +143,11 @@ lima_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) | |
case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER: | |
return 0; | |
+ case PIPE_CAP_VERTEX_BUFFER_OFFSET_ALIGNMENT: | |
+ case PIPE_CAP_VERTEX_BUFFER_STRIDE_ALIGNMENT: | |
+ case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_ALIGNMENT: | |
+ return 64; | |
+ | |
default: | |
return u_pipe_screen_get_param_defaults(pscreen, param); | |
} | |
diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c | |
index 8258614aebe..46501a0ae2b 100644 | |
--- a/src/gallium/drivers/llvmpipe/lp_screen.c | |
+++ b/src/gallium/drivers/llvmpipe/lp_screen.c | |
@@ -225,10 +225,6 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param) | |
return GALLIVM_HAVE_CORO; | |
case PIPE_CAP_USER_VERTEX_BUFFERS: | |
return 1; | |
- case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY: | |
- return 0; | |
case PIPE_CAP_TGSI_TEXCOORD: | |
case PIPE_CAP_DRAW_INDIRECT: | |
return 1; | |
diff --git a/src/gallium/drivers/nouveau/nv30/nv30_screen.c b/src/gallium/drivers/nouveau/nv30/nv30_screen.c | |
index c4b514cfa61..55f59eabc4e 100644 | |
--- a/src/gallium/drivers/nouveau/nv30/nv30_screen.c | |
+++ b/src/gallium/drivers/nouveau/nv30/nv30_screen.c | |
@@ -96,12 +96,13 @@ nv30_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) | |
case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER: | |
case PIPE_CAP_TGSI_TEXCOORD: | |
case PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT: | |
- case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY: | |
case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER: | |
case PIPE_CAP_ALLOW_MAPPED_BUFFERS_DURING_EXECUTION: | |
return 1; | |
+ case PIPE_CAP_VERTEX_BUFFER_OFFSET_ALIGNMENT: | |
+ case PIPE_CAP_VERTEX_BUFFER_STRIDE_ALIGNMENT: | |
+ case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_ALIGNMENT: | |
+ return 4; | |
/* nv35 capabilities */ | |
case PIPE_CAP_DEPTH_BOUNDS_TEST: | |
return eng3d->oclass == NV35_3D_CLASS || eng3d->oclass >= NV40_3D_CLASS; | |
diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c b/src/gallium/drivers/nouveau/nv50/nv50_screen.c | |
index ad35bd8cd42..0fee4bfefb4 100644 | |
--- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c | |
+++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c | |
@@ -242,9 +242,6 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) | |
case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER: | |
case PIPE_CAP_SHADER_STENCIL_EXPORT: | |
case PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS: | |
- case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY: | |
case PIPE_CAP_TGSI_TEXCOORD: | |
case PIPE_CAP_TGSI_VS_LAYER_VIEWPORT: | |
case PIPE_CAP_TEXTURE_GATHER_SM5: | |
diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c | |
index c7779c26548..9b7be053930 100644 | |
--- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c | |
+++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c | |
@@ -316,9 +316,6 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) | |
case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER: | |
case PIPE_CAP_SHADER_STENCIL_EXPORT: | |
case PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS: | |
- case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY: | |
case PIPE_CAP_FAKE_SW_MSAA: | |
case PIPE_CAP_TGSI_VS_WINDOW_SPACE_POSITION: | |
case PIPE_CAP_VERTEXID_NOBASE: | |
diff --git a/src/gallium/drivers/panfrost/pan_screen.c b/src/gallium/drivers/panfrost/pan_screen.c | |
index b2954c0751d..920f4294796 100644 | |
--- a/src/gallium/drivers/panfrost/pan_screen.c | |
+++ b/src/gallium/drivers/panfrost/pan_screen.c | |
@@ -162,8 +162,8 @@ panfrost_get_param(struct pipe_screen *screen, enum pipe_cap param) | |
return is_deqp; | |
/* TODO: Where does this req come from in practice? */ | |
- case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY: | |
- return 1; | |
+ case PIPE_CAP_VERTEX_BUFFER_STRIDE_ALIGNMENT: | |
+ return 4; | |
case PIPE_CAP_MAX_TEXTURE_2D_SIZE: | |
return 4096; | |
diff --git a/src/gallium/drivers/r300/r300_screen.c b/src/gallium/drivers/r300/r300_screen.c | |
index 1300596db27..37702b8bf13 100644 | |
--- a/src/gallium/drivers/r300/r300_screen.c | |
+++ b/src/gallium/drivers/r300/r300_screen.c | |
@@ -311,10 +311,10 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param) | |
return !r300screen->caps.has_tcl; | |
/* HWTCL-only features / limitations. */ | |
- case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY: | |
- return r300screen->caps.has_tcl; | |
+ case PIPE_CAP_VERTEX_BUFFER_OFFSET_ALIGNMENT: | |
+ case PIPE_CAP_VERTEX_BUFFER_STRIDE_ALIGNMENT: | |
+ case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_ALIGNMENT: | |
+ return r300screen->caps.has_tcl ? 4 : 1; | |
case PIPE_CAP_TGSI_TEXCOORD: | |
return 0; | |
diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c | |
index 831d348b430..f6ab1551602 100644 | |
--- a/src/gallium/drivers/r600/r600_pipe.c | |
+++ b/src/gallium/drivers/r600/r600_pipe.c | |
@@ -287,9 +287,6 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param) | |
case PIPE_CAP_VERTEX_COLOR_UNCLAMPED: | |
case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION: | |
case PIPE_CAP_TGSI_INSTANCEID: | |
- case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY: | |
case PIPE_CAP_START_INSTANCE: | |
case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS: | |
case PIPE_CAP_TEXTURE_BUFFER_OBJECTS: | |
@@ -319,6 +316,11 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param) | |
case PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR: | |
return 1; | |
+ case PIPE_CAP_VERTEX_BUFFER_OFFSET_ALIGNMENT: | |
+ case PIPE_CAP_VERTEX_BUFFER_STRIDE_ALIGNMENT: | |
+ case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_ALIGNMENT: | |
+ return 4; | |
+ | |
case PIPE_CAP_MAX_TEXTURE_UPLOAD_MEMORY_BUDGET: | |
/* Optimal number for good TexSubImage performance on Polaris10. */ | |
return 64 * 1024 * 1024; | |
diff --git a/src/gallium/drivers/radeonsi/si_get.c b/src/gallium/drivers/radeonsi/si_get.c | |
index 4b63d6b7522..cf6cda546e3 100644 | |
--- a/src/gallium/drivers/radeonsi/si_get.c | |
+++ b/src/gallium/drivers/radeonsi/si_get.c | |
@@ -205,10 +205,10 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param) | |
case PIPE_CAP_MAX_SHADER_BUFFER_SIZE: | |
return MIN2(sscreen->info.max_alloc_size, INT_MAX); | |
- case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY: | |
- return LLVM_VERSION_MAJOR < 9 && !sscreen->info.has_unaligned_shader_loads; | |
+ case PIPE_CAP_VERTEX_BUFFER_OFFSET_ALIGNMENT: | |
+ case PIPE_CAP_VERTEX_BUFFER_STRIDE_ALIGNMENT: | |
+ case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_ALIGNMENT: | |
+ return (LLVM_VERSION_MAJOR < 9 && !sscreen->info.has_unaligned_shader_loads) ? 4 : 1; | |
case PIPE_CAP_SPARSE_BUFFER_PAGE_SIZE: | |
return sscreen->info.has_sparse_vm_mappings ? | |
diff --git a/src/gallium/drivers/softpipe/sp_screen.c b/src/gallium/drivers/softpipe/sp_screen.c | |
index 41910c10a31..c606f5e7d3d 100644 | |
--- a/src/gallium/drivers/softpipe/sp_screen.c | |
+++ b/src/gallium/drivers/softpipe/sp_screen.c | |
@@ -181,9 +181,6 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param) | |
case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT: | |
return 16; | |
case PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS: | |
- case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY: | |
case PIPE_CAP_TEXTURE_MULTISAMPLE: | |
return 0; | |
case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT: | |
diff --git a/src/gallium/drivers/svga/svga_screen.c b/src/gallium/drivers/svga/svga_screen.c | |
index dc521cf3f9c..144f506cfb9 100644 | |
--- a/src/gallium/drivers/svga/svga_screen.c | |
+++ b/src/gallium/drivers/svga/svga_screen.c | |
@@ -403,10 +403,10 @@ svga_get_param(struct pipe_screen *screen, enum pipe_cap param) | |
return 0; | |
case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT: | |
return 64; | |
- case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY: | |
- return 1; /* need 4-byte alignment for all offsets and strides */ | |
+ case PIPE_CAP_VERTEX_BUFFER_STRIDE_ALIGNMENT: | |
+ case PIPE_CAP_VERTEX_BUFFER_OFFSET_ALIGNMENT: | |
+ case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_ALIGNMENT: | |
+ return 4; /* need 4-byte alignment for all offsets and strides */ | |
case PIPE_CAP_MAX_VERTEX_ATTRIB_STRIDE: | |
return 2048; | |
case PIPE_CAP_MAX_VIEWPORTS: | |
diff --git a/src/gallium/drivers/swr/swr_screen.cpp b/src/gallium/drivers/swr/swr_screen.cpp | |
index b2e3132b2a7..f4ac192e321 100644 | |
--- a/src/gallium/drivers/swr/swr_screen.cpp | |
+++ b/src/gallium/drivers/swr/swr_screen.cpp | |
@@ -290,10 +290,10 @@ swr_get_param(struct pipe_screen *screen, enum pipe_cap param) | |
return (swr_screen(screen)->msaa_max_count > 1) ? 0 : 1; | |
/* fetch jit change for 2-4GB buffers requires alignment */ | |
- case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY: | |
- return 1; | |
+ case PIPE_CAP_VERTEX_BUFFER_OFFSET_ALIGNMENT: | |
+ case PIPE_CAP_VERTEX_BUFFER_STRIDE_ALIGNMENT: | |
+ case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_ALIGNMENT: | |
+ return 4; | |
/* unsupported features */ | |
case PIPE_CAP_ANISOTROPIC_FILTER: | |
diff --git a/src/gallium/drivers/virgl/virgl_screen.c b/src/gallium/drivers/virgl/virgl_screen.c | |
index 869e25cc46c..26840113afa 100644 | |
--- a/src/gallium/drivers/virgl/virgl_screen.c | |
+++ b/src/gallium/drivers/virgl/virgl_screen.c | |
@@ -177,9 +177,6 @@ virgl_get_param(struct pipe_screen *screen, enum pipe_cap param) | |
case PIPE_CAP_START_INSTANCE: | |
return vscreen->caps.caps.v1.bset.start_instance; | |
case PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS: | |
- case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY: | |
- case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY: | |
case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER: | |
return 0; | |
case PIPE_CAP_QUERY_TIMESTAMP: | |
diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h | |
index 76afb5a311c..b0457370b23 100644 | |
--- a/src/gallium/include/pipe/p_defines.h | |
+++ b/src/gallium/include/pipe/p_defines.h | |
@@ -736,9 +736,9 @@ enum pipe_cap | |
PIPE_CAP_ESSL_FEATURE_LEVEL, | |
PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION, | |
PIPE_CAP_USER_VERTEX_BUFFERS, | |
- PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY, | |
- PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY, | |
- PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY, | |
+ PIPE_CAP_VERTEX_BUFFER_OFFSET_ALIGNMENT, | |
+ PIPE_CAP_VERTEX_BUFFER_STRIDE_ALIGNMENT, | |
+ PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_ALIGNMENT, | |
PIPE_CAP_COMPUTE, | |
PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT, | |
PIPE_CAP_START_INSTANCE, |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment