mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-28 08:10:09 +01:00
radeonsi: Fix use of 1- or 2- component GL_DOUBLE vbo's.
With Mesa 18.1, commitbe973ed21f, si_llvm_load_input_vs() changed the number of source 32-bit wide dword components used for fetching vertex attributes into the vertex shader from a constant 4 to a variable num_channels number, depending on input data format, with some special case handling for input data formats like 64-Bit doubles. In the case of a GL_DOUBLE input data format with one or two components though, e.g, submitted via ... a) glTexCoordPointer(1, GL_DOUBLE, 0, buffer); b) glTexCoordPointer(2, GL_DOUBLE, 0, buffer); ... the input format would be SI_FIX_FETCH_RG_64_FLOAT, but no special case handling was implemented for that case, so in the default path the number of 32-bit dwords would be set to the number of float input components derived from info->input_usage_mask. This ends with corrupted input to the vertex shader, because fetching a 64-bit double from the vbo requires fetching two 32-bit dwords instead of 1, and fetching a two double input requires 4 dword fetches instead of 2, so in these cases the vertex shader receives incomplete/truncated input data: a) float v = gl_MultiTexCoord0.x; -> v.x is corrupted. b) vec2 v = gl_MultiTexCoord0.xy; -> v.x is assigned correctly, but v.y is corrupted. This happens with the standard TGSI IR compiled shaders. Under NIR with R600_DEBUG=nir, we got correct behavior because the current radeonsi nir code always assigns info->input_usage_mask = TGSI_WRITEMASK_XYZW, thereby always fetches 4 dwords regardless of what the shader actually needs. Fix this by properly assigning 2 or 4 dword fetches for one or two component GL_DOUBLE input. Fixes:be973ed21f("radeonsi: load the right number of components for VS inputs and TBOs") Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com> Cc: mesa-stable@lists.freedesktop.org Cc: Marek Olšák <marek.olsak@amd.com> Signed-off-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
ee8488ea3b
commit
5e30e54e05
1 changed files with 8 additions and 0 deletions
|
|
@ -563,6 +563,14 @@ void si_llvm_load_input_vs(
|
|||
|
||||
/* Do multiple loads for special formats. */
|
||||
switch (fix_fetch) {
|
||||
case SI_FIX_FETCH_RG_64_FLOAT:
|
||||
num_fetches = 1; /* 1 2-dword or 4-dword load */
|
||||
fetch_stride = 0;
|
||||
if (util_last_bit(info->input_usage_mask[input_index]) >= 2)
|
||||
num_channels = 4; /* 2 doubles in 4 dwords */
|
||||
else
|
||||
num_channels = 2; /* 1 double in 2 dwords */
|
||||
break;
|
||||
case SI_FIX_FETCH_RGB_64_FLOAT:
|
||||
num_fetches = 3; /* 3 2-dword loads */
|
||||
fetch_stride = 8;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue