Compare commits
53 Commits
mesa-18.3.
...
mesa-18.3.
Author | SHA1 | Date | |
---|---|---|---|
|
d603cd9d84 | ||
|
cb55bc8771 | ||
|
af223b57a4 | ||
|
c694d84f10 | ||
|
a69ef11424 | ||
|
4b715e3e59 | ||
|
bd7edf473e | ||
|
a34228e1b0 | ||
|
d92bbe54ea | ||
|
54acae83e0 | ||
|
462bc0d5d4 | ||
|
055e0d7126 | ||
|
5b50e6a7ec | ||
|
5594bb584d | ||
|
d369bd91c3 | ||
|
cc45108382 | ||
|
babf9ab7da | ||
|
3985a62afc | ||
|
a7c4368a66 | ||
|
ab83cfd2bf | ||
|
98d571d212 | ||
|
56f90f6213 | ||
|
c2a22a44a1 | ||
|
fe460ee8cd | ||
|
b28aa1178a | ||
|
bb4bbb5c2d | ||
|
ce6a9169f0 | ||
|
bcc8332606 | ||
|
ace4860a4f | ||
|
41671f5dc0 | ||
|
ec659efcba | ||
|
a1f6ae4e27 | ||
|
a32c568d39 | ||
|
d575455be6 | ||
|
7d8a9087ae | ||
|
5598426132 | ||
|
35e9cd3428 | ||
|
1a905e4c5b | ||
|
6b9b7ce38c | ||
|
02566b9725 | ||
|
825cb76860 | ||
|
a941399117 | ||
|
f7040d9107 | ||
|
b8502f1517 | ||
|
33f1569f02 | ||
|
3dd73ab248 | ||
|
3036ffa1a2 | ||
|
8168ee7712 | ||
|
1869f3f6af | ||
|
200004fe03 | ||
|
d7795a8431 | ||
|
e299f1ba59 | ||
|
2e393b483d |
11
.travis.yml
11
.travis.yml
@@ -52,6 +52,7 @@ matrix:
|
||||
# Common
|
||||
- xz-utils
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
- python3.5
|
||||
- python3-pip
|
||||
@@ -120,7 +121,6 @@ matrix:
|
||||
- llvm-6.0-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- x11proto-xf86vidmode-dev
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
@@ -150,7 +150,6 @@ matrix:
|
||||
- llvm-6.0-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- x11proto-xf86vidmode-dev
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
@@ -183,7 +182,6 @@ matrix:
|
||||
- llvm-3.9-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- x11proto-xf86vidmode-dev
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
@@ -222,7 +220,6 @@ matrix:
|
||||
- libclang-3.9-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- x11proto-xf86vidmode-dev
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
@@ -258,7 +255,6 @@ matrix:
|
||||
- libclang-4.0-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- x11proto-xf86vidmode-dev
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
@@ -294,7 +290,6 @@ matrix:
|
||||
- libclang-5.0-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- x11proto-xf86vidmode-dev
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
@@ -327,7 +322,6 @@ matrix:
|
||||
- libclang-6.0-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- x11proto-xf86vidmode-dev
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
@@ -361,7 +355,6 @@ matrix:
|
||||
- libclang-7-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- x11proto-xf86vidmode-dev
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
@@ -397,7 +390,6 @@ matrix:
|
||||
- libedit-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- x11proto-xf86vidmode-dev
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
@@ -427,7 +419,6 @@ matrix:
|
||||
- llvm-6.0-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- x11proto-xf86vidmode-dev
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
|
2
bin/.cherry-ignore
Normal file
2
bin/.cherry-ignore
Normal file
@@ -0,0 +1,2 @@
|
||||
# fixes: Commit was squashed into the respective offenders
|
||||
c02390f8fcd367c7350db568feabb2f062efca14 egl/wayland: rather obvious build fix
|
12
configure.ac
12
configure.ac
@@ -1725,11 +1725,7 @@ xdri)
|
||||
fi
|
||||
fi
|
||||
|
||||
# add xf86vidmode if available
|
||||
PKG_CHECK_MODULES([XF86VIDMODE], [xxf86vm], HAVE_XF86VIDMODE=yes, HAVE_XF86VIDMODE=no)
|
||||
if test "$HAVE_XF86VIDMODE" = yes ; then
|
||||
dri_modules="$dri_modules xxf86vm"
|
||||
fi
|
||||
dri_modules="$dri_modules xxf86vm"
|
||||
|
||||
PKG_CHECK_MODULES([DRIGL], [$dri_modules])
|
||||
GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV $dri_modules"
|
||||
@@ -1742,10 +1738,6 @@ xdri)
|
||||
;;
|
||||
esac
|
||||
|
||||
# This is outside the case (above) so that it is invoked even for non-GLX
|
||||
# builds.
|
||||
AM_CONDITIONAL(HAVE_XF86VIDMODE, test "x$HAVE_XF86VIDMODE" = xyes)
|
||||
|
||||
GLESv1_CM_LIB_DEPS="$LIBDRM_LIBS -lm $PTHREAD_LIBS $DLOPEN_LIBS"
|
||||
GLESv1_CM_PC_LIB_PRIV="-lm $PTHREAD_LIBS $DLOPEN_LIBS"
|
||||
GLESv2_LIB_DEPS="$LIBDRM_LIBS -lm $PTHREAD_LIBS $DLOPEN_LIBS"
|
||||
@@ -1762,8 +1754,6 @@ AC_SUBST([GLESv1_CM_PC_LIB_PRIV])
|
||||
AC_SUBST([GLESv2_LIB_DEPS])
|
||||
AC_SUBST([GLESv2_PC_LIB_PRIV])
|
||||
|
||||
AC_SUBST([HAVE_XF86VIDMODE])
|
||||
|
||||
dnl
|
||||
dnl More GLX setup
|
||||
dnl
|
||||
|
@@ -14,7 +14,7 @@
|
||||
<iframe src="../contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Mesa 18.3.0 Release Notes / TBD</h1>
|
||||
<h1>Mesa 18.3.0 Release Notes / December 7, 2018</h1>
|
||||
|
||||
<p>
|
||||
Mesa 18.3.0 is a new development release. People who are concerned
|
||||
@@ -61,7 +61,6 @@ Note: some of the new features are only available with certain drivers.
|
||||
<li>GL_EXT_vertex_attrib_64bit on i965, nvc0, radeonsi.</li>
|
||||
<li>GL_EXT_window_rectangles on radeonsi.</li>
|
||||
<li>GL_KHR_texture_compression_astc_sliced_3d on radeonsi.</li>
|
||||
<li>GL_INTEL_fragment_shader_ordering on i965.</li>
|
||||
<li>GL_NV_fragment_shader_interlock on i965.</li>
|
||||
<li>EGL_EXT_device_base for all drivers.</li>
|
||||
<li>EGL_EXT_device_drm for all drivers.</li>
|
||||
@@ -71,8 +70,206 @@ Note: some of the new features are only available with certain drivers.
|
||||
<h2>Bug fixes</h2>
|
||||
|
||||
<ul>
|
||||
<li>TBD</li>
|
||||
</ul>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=13728">Bug 13728</a> - [G965] Some objects in Neverwinter Nights Linux version not displayed correctly</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91433">Bug 91433</a> - piglit.spec.arb_depth_buffer_float.fbo-depth-gl_depth_component32f-copypixels fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=93355">Bug 93355</a> - [BXT,SKLGT4e] intermittent ext_framebuffer_multisample.accuracy fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=94957">Bug 94957</a> - dEQP failures on llvmpipe</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=98699">Bug 98699</a> - "float[a+++4 ? 1:1] f;" crashes glsl_compiler</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=99507">Bug 99507</a> - Corrupted frame contents with Vulkan version of DOTA2, Talos Principle and Sascha Willems' demos when they're run Vsynched in fullscreen</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=99730">Bug 99730</a> - Metro Redux game(s) needs override for midshader extension declaration</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=100200">Bug 100200</a> - Default Unreal Engine 4 frag shader fails to compile</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=101247">Bug 101247</a> - Mesa fails to link GLSL programs with unused output blocks</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=102597">Bug 102597</a> - [Regression] mpv, high rendering times (two to three times higher)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=103241">Bug 103241</a> - Anv crashes when using 64-bit vertex inputs</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=104602">Bug 104602</a> - [apitrace] Graphical artifacts in Civilization VI on RX Vega</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=104809">Bug 104809</a> - anv: DOOM 2016 and Wolfenstein II:The New Colossus crash due to not having depthBoundsTest</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=104926">Bug 104926</a> - swrast: Mesa 17.3.3 produces: HW cursor for format 875713089 not supported</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=105333">Bug 105333</a> - [gallium-nine] missing geometry after commit ac: replace ac_build_kill with ac_build_kill_if_false</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=105371">Bug 105371</a> - r600_shader_from_tgsi - GPR limit exceeded - shader requires 360 registers</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=105731">Bug 105731</a> - linker error "fragment shader input ... has no matching output in the previous stage" when previous stage's output declaration in a separate shader object</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=105904">Bug 105904</a> - Needed to delete mesa shader cache after driver upgrade for 32 bit wine vulkan programs to work.</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=105975">Bug 105975</a> - i965 always reports 0 viewport subpixel bits</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=106231">Bug 106231</a> - llvmpipe blends produce bad code after llvm patch https://reviews.llvm.org/D44785</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=106283">Bug 106283</a> - Shader replacements works only for limited use cases</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=106577">Bug 106577</a> - broken rendering with nine and nouveau (GM107)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=106833">Bug 106833</a> - glLinkProgram is expected to fail when vertex attribute aliasing happens on ES3.0 context or later</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=106865">Bug 106865</a> - [GLK] piglit.spec.ext_framebuffer_multisample.accuracy stencil tests fail</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=106980">Bug 106980</a> - Basemark GPU vulkan benchmark hangs on GFX9</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=106997">Bug 106997</a> - [Regression]. Dying light game is crashing on latest mesa</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107088">Bug 107088</a> - [GEN8+] Hang when discarding a fragment if dual source blending is enabled but shader doesn't support it</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107098">Bug 107098</a> - Segfault after munmap(kms_sw_dt->ro_mapped)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107212">Bug 107212</a> - Dual-Core CPU E5500 / G45: RetroArch with reicast core results in corrupted graphics</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107223">Bug 107223</a> - [GEN9+] 50% perf drop in SynMark Fill* tests (E2E RBC gets disabled?)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107276">Bug 107276</a> - radv: OpBitfieldUExtract returns incorrect result when count is zero</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107280">Bug 107280</a> - [DXVK] Batman: Arkham City with tessellation enabled hangs on SKL GT4</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107313">Bug 107313</a> - Meson instructions on web site are non-optimal</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107359">Bug 107359</a> - [Regression] [bisected] [OpenGL CTS] [SKL,BDW] KHR-GL46.texture_barrier*-texels, GTF-GL46.gtf21.GL2FixedTests.buffer_corners.buffer_corners, and GTF-GL46.gtf21.GL2FixedTests.stencil_plane_corners.stencil_plane_corners fail with some configuration</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107460">Bug 107460</a> - radv: OpControlBarrier does not always work correctly (bisected)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107477">Bug 107477</a> - [DXVK] Setting high shader quality in GTA V results in LLVM error</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107483">Bug 107483</a> - DispatchSanity_test.GL31_CORE regression</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107487">Bug 107487</a> - [intel] [tools] intel gpu tools don't honor -D tools=[]</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107488">Bug 107488</a> - gl.h:2090: error: redefinition of typedef ‘GLeglImageOES’</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107510">Bug 107510</a> - [GEN8+] up to 10% perf drop on several 3D benchmarks</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107511">Bug 107511</a> - KHR/khrplatform.h not always installed when needed</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107524">Bug 107524</a> - Broken packDouble2x32 at llvmpipe</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107544">Bug 107544</a> - intel/decoder: out of bounds group_iter</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107547">Bug 107547</a> - shader crashing glsl_compiler (uniform block assigned to vec2, then component substraced by 1)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107550">Bug 107550</a> - "0[2]" as function parameter hits assert</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107563">Bug 107563</a> - [RADV] Broken rendering in Unity demos</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107565">Bug 107565</a> - TypeError: __init__() got an unexpected keyword argument 'future_imports'</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107579">Bug 107579</a> - [SNB] The graphic corruption when we reuse the GS compiled and used for TFB when statebuffer contain magic trash in the unused space</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107601">Bug 107601</a> - Rise of the Tomb Raider Segmentation Fault when the game starts</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107610">Bug 107610</a> - Dolphin emulator mis-renders shadow overlay in Super Mario Sunshine</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107626">Bug 107626</a> - [SNB] The graphical corruption and GPU hang occur sometimes on the piglit test "arb_texture_multisample-large-float-texture" with parameter --fp16</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107658">Bug 107658</a> - [Regression] [bisected] [OpenGLES CTS] KHR-GLES3.packed_pixels.*rectangle.r*8_snorm</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107734">Bug 107734</a> - [GLSL] glsl-fface-invariant, glsl-fcoord-invariant and glsl-pcoord-invariant should fail</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107745">Bug 107745</a> - [bisected] [bdw bsw] piglit.spec.arb_fragment_shader_interlock.arb_fragment_shader_interlock-image-load-store failure</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107760">Bug 107760</a> - GPU Hang when Playing DiRT 3 Complete Edition using Steam Play with DXVK</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107765">Bug 107765</a> - [regression] Batman Arkham City crashes with DXVK under wine</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107772">Bug 107772</a> - Mesa preprocessor matches if(def)s & endifs incorrectly</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107779">Bug 107779</a> - Access violation with some games</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107786">Bug 107786</a> - [DXVK] MSAA reflections are broken in GTA V</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107806">Bug 107806</a> - glsl_get_natural_size_align_bytes() ABORT with GfxBench Vulkan AztecRuins</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107810">Bug 107810</a> - The 'va_end' call is missed after 'va_copy' in 'util_vsnprintf' function under windows</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107832">Bug 107832</a> - Gallium picking A16L16 formats when emulating INTENSITY16 conflicts with mesa</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107843">Bug 107843</a> - 32bit Mesa build failes with meson.</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107856">Bug 107856</a> - i965 incorrectly calculates the number of layers for texture views (assert)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107857">Bug 107857</a> - GPU hang - GS_EMIT without shader outputs</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107865">Bug 107865</a> - swr fail to build with llvm-libs 6.0.1</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107869">Bug 107869</a> - u_thread.h:87:4: error: use of undeclared identifier 'cpu_set_t'</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107870">Bug 107870</a> - Undefined symbols for architecture x86_64: "_util_cpu_caps"</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107879">Bug 107879</a> - crash happens when link program</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107891">Bug 107891</a> - [wine, regression, bisected] RAGE, Wolfenstein The New Order hangs in menu</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107923">Bug 107923</a> - build_id.c:126: multiple definition of `build_id_length'</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107926">Bug 107926</a> - [anv] Rise of the Tomb Raider always misrendering, segfault and gpu hang.</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107941">Bug 107941</a> - GPU hang and system crash with Dota 2 using Vulkan</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107971">Bug 107971</a> - SPV_GOOGLE_hlsl_functionality1 / SPV_GOOGLE_decorate_string</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108012">Bug 108012</a> - Compiler crashes on access of non-existent member incremental operations</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108024">Bug 108024</a> - [Debian Stretch]Fail to build because "xcb_randr_lease_t"</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108082">Bug 108082</a> - warning: unknown warning option '-Wno-format-truncation' [-Wunknown-warning-option]</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108109">Bug 108109</a> - [GLSL] no-overloads.vert fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108112">Bug 108112</a> - [vulkancts] some of the coherent memory tests fail.</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108113">Bug 108113</a> - [vulkancts] r32g32b32 transfer operations not implemented</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108115">Bug 108115</a> - [vulkancts] dEQP-VK.subgroups.vote.graphics.subgroupallequal.* fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108164">Bug 108164</a> - [radv] VM faults since 5d6a560a2986c9ab421b3c7904d29bb7bc35e36f</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108245">Bug 108245</a> - RADV/Vega: Low mip levels of large BCn textures get corrupted by vkCmdCopyBufferToImage</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108272">Bug 108272</a> - [polaris10] opencl-mesa: Anything using OpenCL segfaults, XFX Radeon RX 580</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108311">Bug 108311</a> - Query buffer object support is broken on r600.</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108319">Bug 108319</a> - [GLK BXT BSW] Assertion in piglit.spec.arb_gpu_shader_fp64.execution.built-in-functions.vs-sign-sat-neg-abs</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108491">Bug 108491</a> - Commit baa38c14 causes output issues on my VEGA with RADV</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108524">Bug 108524</a> - [RADV] GPU lockup on event synchronization</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108530">Bug 108530</a> - (mesa-18.3) [Tracker] Mesa 18.3 Release Tracker</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108532">Bug 108532</a> - make check nir_copy_prop_vars_test.store_store_load_different_components regression</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108560">Bug 108560</a> - Mesa 32 is built without sse</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108595">Bug 108595</a> - ir3_compiler valgrind build error</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108617">Bug 108617</a> - [deqp] Mesa fails conformance for egl_ext_device</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108630">Bug 108630</a> - [G965] piglit.spec.!opengl 1_2.tex3d-maxsize spins forever</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108635">Bug 108635</a> - Mesa master commit 68dc591af16ebb36814e4c187e4998948103c99c causes XWayland to segfault</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108713">Bug 108713</a> - Gallium: use after free with transform feedback</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108829">Bug 108829</a> - [meson] libglapi exports internal API</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108894">Bug 108894</a> - [anv] vkCmdCopyBuffer() and vkCmdCopyQueryPoolResults() write-after-write hazard</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108909">Bug 108909</a> - Vkd3d test failure test_resolve_non_issued_query_data()</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108914">Bug 108914</a> - blocky shadow artifacts in The Forest with DXVK, RADV_DEBUG=nohiz fixes this</li>
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
|
@@ -1350,7 +1350,7 @@ if with_platform_x11
|
||||
dep_xdamage = dependency('xdamage', version : '>= 1.1')
|
||||
dep_xfixes = dependency('xfixes')
|
||||
dep_xcb_glx = dependency('xcb-glx', version : '>= 1.8.1')
|
||||
dep_xxf86vm = dependency('xxf86vm', required : false)
|
||||
dep_xxf86vm = dependency('xxf86vm')
|
||||
endif
|
||||
if (with_any_vk or with_glx == 'dri' or
|
||||
(with_gallium_vdpau or with_gallium_xvmc or with_gallium_va or
|
||||
@@ -1428,13 +1428,11 @@ elif with_glx == 'dri'
|
||||
if with_dri_platform == 'drm'
|
||||
gl_priv_reqs += 'xcb-dri2 >= 1.8'
|
||||
endif
|
||||
gl_priv_reqs += 'xxf86vm'
|
||||
endif
|
||||
if dep_libdrm.found()
|
||||
gl_priv_reqs += 'libdrm >= 2.4.75'
|
||||
endif
|
||||
if dep_xxf86vm.found()
|
||||
gl_priv_reqs += 'xxf86vm'
|
||||
endif
|
||||
|
||||
gl_priv_libs = []
|
||||
if dep_thread.found()
|
||||
|
@@ -140,7 +140,7 @@ libvulkan_radeon = shared_library(
|
||||
],
|
||||
dependencies : [
|
||||
dep_llvm, dep_libdrm_amdgpu, dep_thread, dep_elf, dep_dl, dep_m,
|
||||
dep_valgrind,
|
||||
dep_valgrind, radv_deps,
|
||||
idep_nir,
|
||||
],
|
||||
c_args : [c_vis_args, no_override_init_args, radv_flags],
|
||||
|
@@ -110,17 +110,6 @@ radv_image_from_gralloc(VkDevice device_h,
|
||||
struct radv_bo *bo = NULL;
|
||||
VkResult result;
|
||||
|
||||
result = radv_image_create(device_h,
|
||||
&(struct radv_image_create_info) {
|
||||
.vk_info = base_info,
|
||||
.scanout = true,
|
||||
.no_metadata_planes = true},
|
||||
alloc,
|
||||
&image_h);
|
||||
|
||||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
|
||||
if (gralloc_info->handle->numFds != 1) {
|
||||
return vk_errorf(device->instance, VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR,
|
||||
"VkNativeBufferANDROID::handle::numFds is %d, "
|
||||
@@ -133,23 +122,14 @@ radv_image_from_gralloc(VkDevice device_h,
|
||||
*/
|
||||
int dma_buf = gralloc_info->handle->data[0];
|
||||
|
||||
image = radv_image_from_handle(image_h);
|
||||
|
||||
VkDeviceMemory memory_h;
|
||||
|
||||
const VkMemoryDedicatedAllocateInfoKHR ded_alloc = {
|
||||
.sType = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR,
|
||||
.pNext = NULL,
|
||||
.buffer = VK_NULL_HANDLE,
|
||||
.image = image_h
|
||||
};
|
||||
|
||||
const VkImportMemoryFdInfoKHR import_info = {
|
||||
.sType = VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR,
|
||||
.pNext = &ded_alloc,
|
||||
.handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR,
|
||||
.fd = dup(dma_buf),
|
||||
};
|
||||
|
||||
/* Find the first VRAM memory type, or GART for PRIME images. */
|
||||
int memory_type_index = -1;
|
||||
for (int i = 0; i < device->physical_device->memory_properties.memoryTypeCount; ++i) {
|
||||
@@ -168,14 +148,49 @@ radv_image_from_gralloc(VkDevice device_h,
|
||||
&(VkMemoryAllocateInfo) {
|
||||
.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
|
||||
.pNext = &import_info,
|
||||
.allocationSize = image->size,
|
||||
/* Max buffer size, unused for imports */
|
||||
.allocationSize = 0x7FFFFFFF,
|
||||
.memoryTypeIndex = memory_type_index,
|
||||
},
|
||||
alloc,
|
||||
&memory_h);
|
||||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
|
||||
struct radeon_bo_metadata md;
|
||||
device->ws->buffer_get_metadata(radv_device_memory_from_handle(memory_h)->bo, &md);
|
||||
|
||||
bool is_scanout;
|
||||
if (device->physical_device->rad_info.chip_class >= GFX9) {
|
||||
/* Copied from radeonsi, but is hacky so should be cleaned up. */
|
||||
is_scanout = md.u.gfx9.swizzle_mode == 0 || md.u.gfx9.swizzle_mode % 4 == 2;
|
||||
} else {
|
||||
is_scanout = md.u.legacy.scanout;
|
||||
}
|
||||
|
||||
VkImageCreateInfo updated_base_info = *base_info;
|
||||
|
||||
VkExternalMemoryImageCreateInfo external_memory_info = {
|
||||
.sType = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO,
|
||||
.pNext = updated_base_info.pNext,
|
||||
.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT,
|
||||
};
|
||||
|
||||
updated_base_info.pNext = &external_memory_info;
|
||||
|
||||
result = radv_image_create(device_h,
|
||||
&(struct radv_image_create_info) {
|
||||
.vk_info = &updated_base_info,
|
||||
.scanout = is_scanout,
|
||||
.no_metadata_planes = true},
|
||||
alloc,
|
||||
&image_h);
|
||||
|
||||
if (result != VK_SUCCESS)
|
||||
goto fail_create_image;
|
||||
|
||||
image = radv_image_from_handle(image_h);
|
||||
|
||||
radv_BindImageMemory(device_h, image_h, memory_h, 0);
|
||||
|
||||
image->owned_memory = memory_h;
|
||||
@@ -185,9 +200,7 @@ radv_image_from_gralloc(VkDevice device_h,
|
||||
return VK_SUCCESS;
|
||||
|
||||
fail_create_image:
|
||||
fail_size:
|
||||
radv_DestroyImage(device_h, image_h, alloc);
|
||||
|
||||
radv_FreeMemory(device_h, memory_h, alloc);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@@ -1068,7 +1068,7 @@ static void
|
||||
radv_update_zrange_precision(struct radv_cmd_buffer *cmd_buffer,
|
||||
struct radv_ds_buffer_info *ds,
|
||||
struct radv_image *image, VkImageLayout layout,
|
||||
bool requires_cond_write)
|
||||
bool requires_cond_exec)
|
||||
{
|
||||
uint32_t db_z_info = ds->db_z_info;
|
||||
uint32_t db_z_info_reg;
|
||||
@@ -1092,38 +1092,21 @@ radv_update_zrange_precision(struct radv_cmd_buffer *cmd_buffer,
|
||||
}
|
||||
|
||||
/* When we don't know the last fast clear value we need to emit a
|
||||
* conditional packet, otherwise we can update DB_Z_INFO directly.
|
||||
* conditional packet that will eventually skip the following
|
||||
* SET_CONTEXT_REG packet.
|
||||
*/
|
||||
if (requires_cond_write) {
|
||||
radeon_emit(cmd_buffer->cs, PKT3(PKT3_COND_WRITE, 7, 0));
|
||||
|
||||
const uint32_t write_space = 0 << 8; /* register */
|
||||
const uint32_t poll_space = 1 << 4; /* memory */
|
||||
const uint32_t function = 3 << 0; /* equal to the reference */
|
||||
const uint32_t options = write_space | poll_space | function;
|
||||
radeon_emit(cmd_buffer->cs, options);
|
||||
|
||||
/* poll address - location of the depth clear value */
|
||||
if (requires_cond_exec) {
|
||||
uint64_t va = radv_buffer_get_va(image->bo);
|
||||
va += image->offset + image->clear_value_offset;
|
||||
|
||||
/* In presence of stencil format, we have to adjust the base
|
||||
* address because the first value is the stencil clear value.
|
||||
*/
|
||||
if (vk_format_is_stencil(image->vk_format))
|
||||
va += 4;
|
||||
va += image->offset + image->tc_compat_zrange_offset;
|
||||
|
||||
radeon_emit(cmd_buffer->cs, PKT3(PKT3_COND_EXEC, 3, 0));
|
||||
radeon_emit(cmd_buffer->cs, va);
|
||||
radeon_emit(cmd_buffer->cs, va >> 32);
|
||||
|
||||
radeon_emit(cmd_buffer->cs, fui(0.0f)); /* reference value */
|
||||
radeon_emit(cmd_buffer->cs, (uint32_t)-1); /* comparison mask */
|
||||
radeon_emit(cmd_buffer->cs, db_z_info_reg >> 2); /* write address low */
|
||||
radeon_emit(cmd_buffer->cs, 0u); /* write address high */
|
||||
radeon_emit(cmd_buffer->cs, db_z_info);
|
||||
} else {
|
||||
radeon_set_context_reg(cmd_buffer->cs, db_z_info_reg, db_z_info);
|
||||
radeon_emit(cmd_buffer->cs, 0);
|
||||
radeon_emit(cmd_buffer->cs, 3); /* SET_CONTEXT_REG size */
|
||||
}
|
||||
|
||||
radeon_set_context_reg(cmd_buffer->cs, db_z_info_reg, db_z_info);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1270,6 +1253,45 @@ radv_set_ds_clear_metadata(struct radv_cmd_buffer *cmd_buffer,
|
||||
radeon_emit(cs, fui(ds_clear_value.depth));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the TC-compat metadata value for this image.
|
||||
*/
|
||||
static void
|
||||
radv_set_tc_compat_zrange_metadata(struct radv_cmd_buffer *cmd_buffer,
|
||||
struct radv_image *image,
|
||||
uint32_t value)
|
||||
{
|
||||
struct radeon_cmdbuf *cs = cmd_buffer->cs;
|
||||
uint64_t va = radv_buffer_get_va(image->bo);
|
||||
va += image->offset + image->tc_compat_zrange_offset;
|
||||
|
||||
radeon_emit(cs, PKT3(PKT3_WRITE_DATA, 3, 0));
|
||||
radeon_emit(cs, S_370_DST_SEL(V_370_MEM_ASYNC) |
|
||||
S_370_WR_CONFIRM(1) |
|
||||
S_370_ENGINE_SEL(V_370_PFP));
|
||||
radeon_emit(cs, va);
|
||||
radeon_emit(cs, va >> 32);
|
||||
radeon_emit(cs, value);
|
||||
}
|
||||
|
||||
static void
|
||||
radv_update_tc_compat_zrange_metadata(struct radv_cmd_buffer *cmd_buffer,
|
||||
struct radv_image *image,
|
||||
VkClearDepthStencilValue ds_clear_value)
|
||||
{
|
||||
struct radeon_cmdbuf *cs = cmd_buffer->cs;
|
||||
uint64_t va = radv_buffer_get_va(image->bo);
|
||||
va += image->offset + image->tc_compat_zrange_offset;
|
||||
uint32_t cond_val;
|
||||
|
||||
/* Conditionally set DB_Z_INFO.ZRANGE_PRECISION to 0 when the last
|
||||
* depth clear value is 0.0f.
|
||||
*/
|
||||
cond_val = ds_clear_value.depth == 0.0f ? UINT_MAX : 0;
|
||||
|
||||
radv_set_tc_compat_zrange_metadata(cmd_buffer, image, cond_val);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the clear depth/stencil values for this image.
|
||||
*/
|
||||
@@ -1283,6 +1305,12 @@ radv_update_ds_clear_metadata(struct radv_cmd_buffer *cmd_buffer,
|
||||
|
||||
radv_set_ds_clear_metadata(cmd_buffer, image, ds_clear_value, aspects);
|
||||
|
||||
if (radv_image_is_tc_compat_htile(image) &&
|
||||
(aspects & VK_IMAGE_ASPECT_DEPTH_BIT)) {
|
||||
radv_update_tc_compat_zrange_metadata(cmd_buffer, image,
|
||||
ds_clear_value);
|
||||
}
|
||||
|
||||
radv_update_bound_fast_clear_ds(cmd_buffer, image, ds_clear_value,
|
||||
aspects);
|
||||
}
|
||||
@@ -4192,6 +4220,15 @@ static void radv_initialize_htile(struct radv_cmd_buffer *cmd_buffer,
|
||||
aspects |= VK_IMAGE_ASPECT_STENCIL_BIT;
|
||||
|
||||
radv_set_ds_clear_metadata(cmd_buffer, image, value, aspects);
|
||||
|
||||
if (radv_image_is_tc_compat_htile(image)) {
|
||||
/* Initialize the TC-compat metada value to 0 because by
|
||||
* default DB_Z_INFO.RANGE_PRECISION is set to 1, and we only
|
||||
* need have to conditionally update its value when performing
|
||||
* a fast depth clear.
|
||||
*/
|
||||
radv_set_tc_compat_zrange_metadata(cmd_buffer, image, 0);
|
||||
}
|
||||
}
|
||||
|
||||
static void radv_handle_depth_image_transition(struct radv_cmd_buffer *cmd_buffer,
|
||||
|
@@ -691,7 +691,7 @@ radv_query_opaque_metadata(struct radv_device *device,
|
||||
si_make_texture_descriptor(device, image, false,
|
||||
(VkImageViewType)image->type, image->vk_format,
|
||||
&fixedmapping, 0, image->info.levels - 1, 0,
|
||||
image->info.array_size,
|
||||
image->info.array_size - 1,
|
||||
image->info.width, image->info.height,
|
||||
image->info.depth,
|
||||
desc, NULL);
|
||||
@@ -870,6 +870,14 @@ radv_image_alloc_htile(struct radv_image *image)
|
||||
/* + 8 for storing the clear values */
|
||||
image->clear_value_offset = image->htile_offset + image->surface.htile_size;
|
||||
image->size = image->clear_value_offset + 8;
|
||||
if (radv_image_is_tc_compat_htile(image)) {
|
||||
/* Metadata for the TC-compatible HTILE hardware bug which
|
||||
* have to be fixed by updating ZRANGE_PRECISION when doing
|
||||
* fast depth clears to 0.0f.
|
||||
*/
|
||||
image->tc_compat_zrange_offset = image->clear_value_offset + 8;
|
||||
image->size = image->clear_value_offset + 16;
|
||||
}
|
||||
image->alignment = align64(image->alignment, image->surface.htile_alignment);
|
||||
}
|
||||
|
||||
@@ -1014,8 +1022,8 @@ radv_image_create(VkDevice _device,
|
||||
/* Otherwise, try to enable HTILE for depth surfaces. */
|
||||
if (radv_image_can_enable_htile(image) &&
|
||||
!(device->instance->debug_flags & RADV_DEBUG_NO_HIZ)) {
|
||||
radv_image_alloc_htile(image);
|
||||
image->tc_compatible_htile = image->surface.flags & RADEON_SURF_TC_COMPATIBLE_HTILE;
|
||||
radv_image_alloc_htile(image);
|
||||
} else {
|
||||
image->surface.htile_size = 0;
|
||||
}
|
||||
@@ -1175,8 +1183,6 @@ radv_image_view_init(struct radv_image_view *iview,
|
||||
if (device->physical_device->rad_info.chip_class >= GFX9 &&
|
||||
vk_format_is_compressed(image->vk_format) &&
|
||||
!vk_format_is_compressed(iview->vk_format)) {
|
||||
unsigned rounded_img_w = util_next_power_of_two(iview->extent.width);
|
||||
unsigned rounded_img_h = util_next_power_of_two(iview->extent.height);
|
||||
unsigned lvl_width = radv_minify(image->info.width , range->baseMipLevel);
|
||||
unsigned lvl_height = radv_minify(image->info.height, range->baseMipLevel);
|
||||
|
||||
@@ -1186,8 +1192,8 @@ radv_image_view_init(struct radv_image_view *iview,
|
||||
lvl_width <<= range->baseMipLevel;
|
||||
lvl_height <<= range->baseMipLevel;
|
||||
|
||||
iview->extent.width = CLAMP(lvl_width, iview->extent.width, rounded_img_w);
|
||||
iview->extent.height = CLAMP(lvl_height, iview->extent.height, rounded_img_h);
|
||||
iview->extent.width = CLAMP(lvl_width, iview->extent.width, iview->image->surface.u.gfx9.surf_pitch);
|
||||
iview->extent.height = CLAMP(lvl_height, iview->extent.height, iview->image->surface.u.gfx9.surf_height);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -2061,7 +2061,7 @@ radv_meta_image_to_image_cs(struct radv_cmd_buffer *cmd_buffer,
|
||||
itoi_bind_descriptors(cmd_buffer, &src_view, &dst_view);
|
||||
|
||||
if (device->physical_device->rad_info.chip_class >= GFX9 &&
|
||||
src->image->type == VK_IMAGE_TYPE_3D)
|
||||
(src->image->type == VK_IMAGE_TYPE_3D || dst->image->type == VK_IMAGE_TYPE_3D))
|
||||
pipeline = cmd_buffer->device->meta_state.itoi.pipeline_3d;
|
||||
radv_CmdBindPipeline(radv_cmd_buffer_to_handle(cmd_buffer),
|
||||
VK_PIPELINE_BIND_POINT_COMPUTE, pipeline);
|
||||
|
@@ -1498,6 +1498,14 @@ struct radv_image {
|
||||
uint64_t clear_value_offset;
|
||||
uint64_t dcc_pred_offset;
|
||||
|
||||
/*
|
||||
* Metadata for the TC-compat zrange workaround. If the 32-bit value
|
||||
* stored at this offset is UINT_MAX, the driver will emit
|
||||
* DB_Z_INFO.ZRANGE_PRECISION=0, otherwise it will skip the
|
||||
* SET_CONTEXT_REG packet.
|
||||
*/
|
||||
uint64_t tc_compat_zrange_offset;
|
||||
|
||||
/* For VK_ANDROID_native_buffer, the WSI image owns the memory, */
|
||||
VkDeviceMemory owned_memory;
|
||||
};
|
||||
|
@@ -1341,10 +1341,13 @@ void radv_CmdCopyQueryPoolResults(
|
||||
|
||||
|
||||
if (flags & VK_QUERY_RESULT_WAIT_BIT) {
|
||||
/* Wait on the high 32 bits of the timestamp in
|
||||
* case the low part is 0xffffffff.
|
||||
*/
|
||||
radeon_emit(cs, PKT3(PKT3_WAIT_REG_MEM, 5, false));
|
||||
radeon_emit(cs, WAIT_REG_MEM_NOT_EQUAL | WAIT_REG_MEM_MEM_SPACE(1));
|
||||
radeon_emit(cs, local_src_va);
|
||||
radeon_emit(cs, local_src_va >> 32);
|
||||
radeon_emit(cs, local_src_va + 4);
|
||||
radeon_emit(cs, (local_src_va + 4) >> 32);
|
||||
radeon_emit(cs, TIMESTAMP_NOT_READY >> 32);
|
||||
radeon_emit(cs, 0xffffffff);
|
||||
radeon_emit(cs, 4);
|
||||
@@ -1447,6 +1450,22 @@ static unsigned event_type_for_stream(unsigned stream)
|
||||
}
|
||||
}
|
||||
|
||||
static void emit_query_flush(struct radv_cmd_buffer *cmd_buffer,
|
||||
struct radv_query_pool *pool)
|
||||
{
|
||||
if (cmd_buffer->pending_reset_query) {
|
||||
if (pool->size >= RADV_BUFFER_OPS_CS_THRESHOLD) {
|
||||
/* Only need to flush caches if the query pool size is
|
||||
* large enough to be resetted using the compute shader
|
||||
* path. Small pools don't need any cache flushes
|
||||
* because we use a CP dma clear.
|
||||
*/
|
||||
si_emit_cache_flush(cmd_buffer);
|
||||
cmd_buffer->pending_reset_query = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void emit_begin_query(struct radv_cmd_buffer *cmd_buffer,
|
||||
uint64_t va,
|
||||
VkQueryType query_type,
|
||||
@@ -1593,17 +1612,7 @@ void radv_CmdBeginQueryIndexedEXT(
|
||||
|
||||
radv_cs_add_buffer(cmd_buffer->device->ws, cs, pool->bo);
|
||||
|
||||
if (cmd_buffer->pending_reset_query) {
|
||||
if (pool->size >= RADV_BUFFER_OPS_CS_THRESHOLD) {
|
||||
/* Only need to flush caches if the query pool size is
|
||||
* large enough to be resetted using the compute shader
|
||||
* path. Small pools don't need any cache flushes
|
||||
* because we use a CP dma clear.
|
||||
*/
|
||||
si_emit_cache_flush(cmd_buffer);
|
||||
cmd_buffer->pending_reset_query = false;
|
||||
}
|
||||
}
|
||||
emit_query_flush(cmd_buffer, pool);
|
||||
|
||||
va += pool->stride * query;
|
||||
|
||||
@@ -1680,6 +1689,8 @@ void radv_CmdWriteTimestamp(
|
||||
|
||||
radv_cs_add_buffer(cmd_buffer->device->ws, cs, pool->bo);
|
||||
|
||||
emit_query_flush(cmd_buffer, pool);
|
||||
|
||||
int num_queries = 1;
|
||||
if (cmd_buffer->state.subpass && cmd_buffer->state.subpass->view_mask)
|
||||
num_queries = util_bitcount(cmd_buffer->state.subpass->view_mask);
|
||||
|
@@ -223,6 +223,8 @@ struct radeon_winsys {
|
||||
|
||||
void (*buffer_set_metadata)(struct radeon_winsys_bo *bo,
|
||||
struct radeon_bo_metadata *md);
|
||||
void (*buffer_get_metadata)(struct radeon_winsys_bo *bo,
|
||||
struct radeon_bo_metadata *md);
|
||||
|
||||
void (*buffer_virtual_bind)(struct radeon_winsys_bo *parent,
|
||||
uint64_t offset, uint64_t size,
|
||||
|
@@ -304,8 +304,12 @@ radv_amdgpu_winsys_bo_create(struct radeon_winsys *_ws,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
unsigned virt_alignment = alignment;
|
||||
if (size >= ws->info.pte_fragment_size)
|
||||
virt_alignment = MAX2(virt_alignment, ws->info.pte_fragment_size);
|
||||
|
||||
r = amdgpu_va_range_alloc(ws->dev, amdgpu_gpu_va_range_general,
|
||||
size, alignment, 0, &va, &va_handle,
|
||||
size, virt_alignment, 0, &va, &va_handle,
|
||||
(flags & RADEON_FLAG_32BIT ? AMDGPU_VA_RANGE_32_BIT : 0) |
|
||||
AMDGPU_VA_RANGE_HIGH);
|
||||
if (r)
|
||||
@@ -536,6 +540,21 @@ radv_amdgpu_winsys_get_fd(struct radeon_winsys *_ws,
|
||||
return true;
|
||||
}
|
||||
|
||||
static unsigned eg_tile_split(unsigned tile_split)
|
||||
{
|
||||
switch (tile_split) {
|
||||
case 0: tile_split = 64; break;
|
||||
case 1: tile_split = 128; break;
|
||||
case 2: tile_split = 256; break;
|
||||
case 3: tile_split = 512; break;
|
||||
default:
|
||||
case 4: tile_split = 1024; break;
|
||||
case 5: tile_split = 2048; break;
|
||||
case 6: tile_split = 4096; break;
|
||||
}
|
||||
return tile_split;
|
||||
}
|
||||
|
||||
static unsigned radv_eg_tile_split_rev(unsigned eg_tile_split)
|
||||
{
|
||||
switch (eg_tile_split) {
|
||||
@@ -589,6 +608,43 @@ radv_amdgpu_winsys_bo_set_metadata(struct radeon_winsys_bo *_bo,
|
||||
amdgpu_bo_set_metadata(bo->bo, &metadata);
|
||||
}
|
||||
|
||||
static void
|
||||
radv_amdgpu_winsys_bo_get_metadata(struct radeon_winsys_bo *_bo,
|
||||
struct radeon_bo_metadata *md)
|
||||
{
|
||||
struct radv_amdgpu_winsys_bo *bo = radv_amdgpu_winsys_bo(_bo);
|
||||
struct amdgpu_bo_info info = {0};
|
||||
|
||||
int r = amdgpu_bo_query_info(bo->bo, &info);
|
||||
if (r)
|
||||
return;
|
||||
|
||||
uint64_t tiling_flags = info.metadata.tiling_info;
|
||||
|
||||
if (bo->ws->info.chip_class >= GFX9) {
|
||||
md->u.gfx9.swizzle_mode = AMDGPU_TILING_GET(tiling_flags, SWIZZLE_MODE);
|
||||
} else {
|
||||
md->u.legacy.microtile = RADEON_LAYOUT_LINEAR;
|
||||
md->u.legacy.macrotile = RADEON_LAYOUT_LINEAR;
|
||||
|
||||
if (AMDGPU_TILING_GET(tiling_flags, ARRAY_MODE) == 4) /* 2D_TILED_THIN1 */
|
||||
md->u.legacy.macrotile = RADEON_LAYOUT_TILED;
|
||||
else if (AMDGPU_TILING_GET(tiling_flags, ARRAY_MODE) == 2) /* 1D_TILED_THIN1 */
|
||||
md->u.legacy.microtile = RADEON_LAYOUT_TILED;
|
||||
|
||||
md->u.legacy.pipe_config = AMDGPU_TILING_GET(tiling_flags, PIPE_CONFIG);
|
||||
md->u.legacy.bankw = 1 << AMDGPU_TILING_GET(tiling_flags, BANK_WIDTH);
|
||||
md->u.legacy.bankh = 1 << AMDGPU_TILING_GET(tiling_flags, BANK_HEIGHT);
|
||||
md->u.legacy.tile_split = eg_tile_split(AMDGPU_TILING_GET(tiling_flags, TILE_SPLIT));
|
||||
md->u.legacy.mtilea = 1 << AMDGPU_TILING_GET(tiling_flags, MACRO_TILE_ASPECT);
|
||||
md->u.legacy.num_banks = 2 << AMDGPU_TILING_GET(tiling_flags, NUM_BANKS);
|
||||
md->u.legacy.scanout = AMDGPU_TILING_GET(tiling_flags, MICRO_TILE_MODE) == 0; /* DISPLAY */
|
||||
}
|
||||
|
||||
md->size_metadata = info.metadata.size_metadata;
|
||||
memcpy(md->metadata, info.metadata.umd_metadata, sizeof(md->metadata));
|
||||
}
|
||||
|
||||
void radv_amdgpu_bo_init_functions(struct radv_amdgpu_winsys *ws)
|
||||
{
|
||||
ws->base.buffer_create = radv_amdgpu_winsys_bo_create;
|
||||
@@ -599,5 +655,6 @@ void radv_amdgpu_bo_init_functions(struct radv_amdgpu_winsys *ws)
|
||||
ws->base.buffer_from_fd = radv_amdgpu_winsys_bo_from_fd;
|
||||
ws->base.buffer_get_fd = radv_amdgpu_winsys_get_fd;
|
||||
ws->base.buffer_set_metadata = radv_amdgpu_winsys_bo_set_metadata;
|
||||
ws->base.buffer_get_metadata = radv_amdgpu_winsys_bo_get_metadata;
|
||||
ws->base.buffer_virtual_bind = radv_amdgpu_winsys_bo_virtual_bind;
|
||||
}
|
||||
|
@@ -525,12 +525,6 @@ supports_nv_fragment_shader_interlock(const _mesa_glsl_parse_state *state)
|
||||
return state->NV_fragment_shader_interlock_enable;
|
||||
}
|
||||
|
||||
static bool
|
||||
supports_intel_fragment_shader_ordering(const _mesa_glsl_parse_state *state)
|
||||
{
|
||||
return state->INTEL_fragment_shader_ordering_enable;
|
||||
}
|
||||
|
||||
static bool
|
||||
shader_clock(const _mesa_glsl_parse_state *state)
|
||||
{
|
||||
@@ -1311,11 +1305,6 @@ builtin_builder::create_intrinsics()
|
||||
supports_arb_fragment_shader_interlock,
|
||||
ir_intrinsic_end_invocation_interlock), NULL);
|
||||
|
||||
add_function("__intrinsic_begin_fragment_shader_ordering",
|
||||
_invocation_interlock_intrinsic(
|
||||
supports_intel_fragment_shader_ordering,
|
||||
ir_intrinsic_begin_fragment_shader_ordering), NULL);
|
||||
|
||||
add_function("__intrinsic_shader_clock",
|
||||
_shader_clock_intrinsic(shader_clock,
|
||||
glsl_type::uvec2_type),
|
||||
@@ -3430,12 +3419,6 @@ builtin_builder::create_builtins()
|
||||
supports_nv_fragment_shader_interlock),
|
||||
NULL);
|
||||
|
||||
add_function("beginFragmentShaderOrderingINTEL",
|
||||
_invocation_interlock(
|
||||
"__intrinsic_begin_fragment_shader_ordering",
|
||||
supports_intel_fragment_shader_ordering),
|
||||
NULL);
|
||||
|
||||
add_function("anyInvocationARB",
|
||||
_vote("__intrinsic_vote_any", vote),
|
||||
NULL);
|
||||
|
@@ -727,7 +727,6 @@ static const _mesa_glsl_extension _mesa_glsl_supported_extensions[] = {
|
||||
EXT_AEP(EXT_texture_buffer),
|
||||
EXT_AEP(EXT_texture_cube_map_array),
|
||||
EXT(INTEL_conservative_rasterization),
|
||||
EXT(INTEL_fragment_shader_ordering),
|
||||
EXT(INTEL_shader_atomic_float_minmax),
|
||||
EXT(MESA_shader_integer_functions),
|
||||
EXT(NV_fragment_shader_interlock),
|
||||
|
@@ -812,8 +812,6 @@ struct _mesa_glsl_parse_state {
|
||||
bool EXT_texture_cube_map_array_warn;
|
||||
bool INTEL_conservative_rasterization_enable;
|
||||
bool INTEL_conservative_rasterization_warn;
|
||||
bool INTEL_fragment_shader_ordering_enable;
|
||||
bool INTEL_fragment_shader_ordering_warn;
|
||||
bool INTEL_shader_atomic_float_minmax_enable;
|
||||
bool INTEL_shader_atomic_float_minmax_warn;
|
||||
bool MESA_shader_integer_functions_enable;
|
||||
|
@@ -742,9 +742,6 @@ nir_visitor::visit(ir_call *ir)
|
||||
case ir_intrinsic_end_invocation_interlock:
|
||||
op = nir_intrinsic_end_invocation_interlock;
|
||||
break;
|
||||
case ir_intrinsic_begin_fragment_shader_ordering:
|
||||
op = nir_intrinsic_begin_fragment_shader_ordering;
|
||||
break;
|
||||
case ir_intrinsic_group_memory_barrier:
|
||||
op = nir_intrinsic_group_memory_barrier;
|
||||
break;
|
||||
@@ -983,9 +980,6 @@ nir_visitor::visit(ir_call *ir)
|
||||
case nir_intrinsic_end_invocation_interlock:
|
||||
nir_builder_instr_insert(&b, &instr->instr);
|
||||
break;
|
||||
case nir_intrinsic_begin_fragment_shader_ordering:
|
||||
nir_builder_instr_insert(&b, &instr->instr);
|
||||
break;
|
||||
case nir_intrinsic_store_ssbo: {
|
||||
exec_node *param = ir->actual_parameters.get_head();
|
||||
ir_rvalue *block = ((ir_instruction *)param)->as_rvalue();
|
||||
|
@@ -1122,7 +1122,6 @@ enum ir_intrinsic_id {
|
||||
ir_intrinsic_memory_barrier_shared,
|
||||
ir_intrinsic_begin_invocation_interlock,
|
||||
ir_intrinsic_end_invocation_interlock,
|
||||
ir_intrinsic_begin_fragment_shader_ordering,
|
||||
|
||||
ir_intrinsic_vote_all,
|
||||
ir_intrinsic_vote_any,
|
||||
|
@@ -360,13 +360,20 @@ read_xfb(struct blob_reader *metadata, struct gl_shader_program *shProg)
|
||||
if (xfb_stage == ~0u)
|
||||
return;
|
||||
|
||||
if (shProg->TransformFeedback.VaryingNames) {
|
||||
for (unsigned i = 0; i < shProg->TransformFeedback.NumVarying; ++i)
|
||||
free(shProg->TransformFeedback.VaryingNames[i]);
|
||||
}
|
||||
|
||||
/* Data set by glTransformFeedbackVaryings. */
|
||||
shProg->TransformFeedback.BufferMode = blob_read_uint32(metadata);
|
||||
blob_copy_bytes(metadata, &shProg->TransformFeedback.BufferStride,
|
||||
sizeof(shProg->TransformFeedback.BufferStride));
|
||||
shProg->TransformFeedback.NumVarying = blob_read_uint32(metadata);
|
||||
|
||||
shProg->TransformFeedback.VaryingNames = (char **)
|
||||
malloc(shProg->TransformFeedback.NumVarying * sizeof(GLchar *));
|
||||
realloc(shProg->TransformFeedback.VaryingNames,
|
||||
shProg->TransformFeedback.NumVarying * sizeof(GLchar *));
|
||||
/* Note, malloc used with VaryingNames. */
|
||||
for (unsigned i = 0; i < shProg->TransformFeedback.NumVarying; i++)
|
||||
shProg->TransformFeedback.VaryingNames[i] =
|
||||
|
@@ -199,7 +199,6 @@ barrier("memory_barrier_image")
|
||||
barrier("memory_barrier_shared")
|
||||
barrier("begin_invocation_interlock")
|
||||
barrier("end_invocation_interlock")
|
||||
barrier("begin_fragment_shader_ordering")
|
||||
|
||||
# A conditional discard, with a single boolean source.
|
||||
intrinsic("discard_if", src_comp=[1])
|
||||
|
@@ -2309,7 +2309,7 @@ dri2_check_dma_buf_format(const _EGLImageAttribs *attrs)
|
||||
{
|
||||
unsigned plane_n = dri2_num_fourcc_format_planes(attrs->DMABufFourCC.Value);
|
||||
if (plane_n == 0) {
|
||||
_eglError(EGL_BAD_ATTRIBUTE, "invalid format");
|
||||
_eglError(EGL_BAD_MATCH, "unknown drm fourcc format");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@@ -1127,13 +1127,22 @@ drm_handle_device(void *data, struct wl_drm *drm, const char *device)
|
||||
if (dri2_dpy->fd == -1) {
|
||||
_eglLog(_EGL_WARNING, "wayland-egl: could not open %s (%s)",
|
||||
dri2_dpy->device_name, strerror(errno));
|
||||
free(dri2_dpy->device_name);
|
||||
dri2_dpy->device_name = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
if (drmGetNodeTypeFromFd(dri2_dpy->fd) == DRM_NODE_RENDER) {
|
||||
dri2_dpy->authenticated = true;
|
||||
} else {
|
||||
drmGetMagic(dri2_dpy->fd, &magic);
|
||||
if (drmGetMagic(dri2_dpy->fd, &magic)) {
|
||||
close(dri2_dpy->fd);
|
||||
dri2_dpy->fd = -1;
|
||||
free(dri2_dpy->device_name);
|
||||
dri2_dpy->device_name = NULL;
|
||||
_eglLog(_EGL_WARNING, "wayland-egl: drmGetMagic failed");
|
||||
return;
|
||||
}
|
||||
wl_drm_authenticate(dri2_dpy->wl_drm, magic);
|
||||
}
|
||||
}
|
||||
|
@@ -142,7 +142,7 @@ pipe_loader_release(struct pipe_loader_device **devs, int ndev);
|
||||
*/
|
||||
bool
|
||||
pipe_loader_sw_probe_dri(struct pipe_loader_device **devs,
|
||||
struct drisw_loader_funcs *drisw_lf);
|
||||
const struct drisw_loader_funcs *drisw_lf);
|
||||
|
||||
/**
|
||||
* Initialize a kms backed sw device given an fd.
|
||||
|
@@ -132,7 +132,7 @@ pipe_loader_sw_probe_teardown_common(struct pipe_loader_sw_device *sdev)
|
||||
|
||||
#ifdef HAVE_PIPE_LOADER_DRI
|
||||
bool
|
||||
pipe_loader_sw_probe_dri(struct pipe_loader_device **devs, struct drisw_loader_funcs *drisw_lf)
|
||||
pipe_loader_sw_probe_dri(struct pipe_loader_device **devs, const struct drisw_loader_funcs *drisw_lf)
|
||||
{
|
||||
struct pipe_loader_sw_device *sdev = CALLOC_STRUCT(pipe_loader_sw_device);
|
||||
int i;
|
||||
|
@@ -600,25 +600,23 @@ static inline void
|
||||
nv50_stage_sampler_states_bind(struct nv50_context *nv50, int s,
|
||||
unsigned nr, void **hwcso)
|
||||
{
|
||||
unsigned highest_found = 0;
|
||||
unsigned i;
|
||||
|
||||
assert(nr <= PIPE_MAX_SAMPLERS);
|
||||
for (i = 0; i < nr; ++i) {
|
||||
struct nv50_tsc_entry *old = nv50->samplers[s][i];
|
||||
|
||||
if (hwcso[i])
|
||||
highest_found = i;
|
||||
|
||||
nv50->samplers[s][i] = nv50_tsc_entry(hwcso[i]);
|
||||
if (old)
|
||||
nv50_screen_tsc_unlock(nv50->screen, old);
|
||||
}
|
||||
assert(nv50->num_samplers[s] <= PIPE_MAX_SAMPLERS);
|
||||
for (; i < nv50->num_samplers[s]; ++i) {
|
||||
if (nv50->samplers[s][i]) {
|
||||
nv50_screen_tsc_unlock(nv50->screen, nv50->samplers[s][i]);
|
||||
nv50->samplers[s][i] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
nv50->num_samplers[s] = nr;
|
||||
if (nr >= nv50->num_samplers[s])
|
||||
nv50->num_samplers[s] = highest_found + 1;
|
||||
|
||||
nv50->dirty_3d |= NV50_NEW_3D_SAMPLERS;
|
||||
}
|
||||
|
@@ -464,11 +464,15 @@ nvc0_stage_sampler_states_bind(struct nvc0_context *nvc0,
|
||||
unsigned s,
|
||||
unsigned nr, void **hwcso)
|
||||
{
|
||||
unsigned highest_found = 0;
|
||||
unsigned i;
|
||||
|
||||
for (i = 0; i < nr; ++i) {
|
||||
struct nv50_tsc_entry *old = nvc0->samplers[s][i];
|
||||
|
||||
if (hwcso[i])
|
||||
highest_found = i;
|
||||
|
||||
if (hwcso[i] == old)
|
||||
continue;
|
||||
nvc0->samplers_dirty[s] |= 1 << i;
|
||||
@@ -477,14 +481,8 @@ nvc0_stage_sampler_states_bind(struct nvc0_context *nvc0,
|
||||
if (old)
|
||||
nvc0_screen_tsc_unlock(nvc0->screen, old);
|
||||
}
|
||||
for (; i < nvc0->num_samplers[s]; ++i) {
|
||||
if (nvc0->samplers[s][i]) {
|
||||
nvc0_screen_tsc_unlock(nvc0->screen, nvc0->samplers[s][i]);
|
||||
nvc0->samplers[s][i] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
nvc0->num_samplers[s] = nr;
|
||||
if (nr >= nvc0->num_samplers[s])
|
||||
nvc0->num_samplers[s] = highest_found + 1;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -105,6 +105,12 @@ static void r600_destroy_context(struct pipe_context *context)
|
||||
}
|
||||
util_unreference_framebuffer_state(&rctx->framebuffer.state);
|
||||
|
||||
if (rctx->gs_rings.gsvs_ring.buffer)
|
||||
pipe_resource_reference(&rctx->gs_rings.gsvs_ring.buffer, NULL);
|
||||
|
||||
if (rctx->gs_rings.esgs_ring.buffer)
|
||||
pipe_resource_reference(&rctx->gs_rings.esgs_ring.buffer, NULL);
|
||||
|
||||
for (sh = 0; sh < PIPE_SHADER_TYPES; ++sh)
|
||||
for (i = 0; i < PIPE_MAX_CONSTANT_BUFFERS; ++i)
|
||||
rctx->b.b.set_constant_buffer(context, sh, i, NULL);
|
||||
|
@@ -1636,7 +1636,7 @@ static void r600_query_hw_get_result_resource(struct r600_common_context *rctx,
|
||||
}
|
||||
|
||||
if (query->buffer.previous) {
|
||||
u_suballocator_alloc(rctx->allocator_zeroed_memory, 16, 16,
|
||||
u_suballocator_alloc(rctx->allocator_zeroed_memory, 16, 256,
|
||||
&tmp_buffer_offset, &tmp_buffer);
|
||||
if (!tmp_buffer)
|
||||
return;
|
||||
|
@@ -793,17 +793,10 @@ static void si_query_hw_do_emit_start(struct si_context *sctx,
|
||||
emit_sample_streamout(cs, va + 32 * stream, stream);
|
||||
break;
|
||||
case PIPE_QUERY_TIME_ELAPSED:
|
||||
/* Write the timestamp from the CP not waiting for
|
||||
* outstanding draws (top-of-pipe).
|
||||
*/
|
||||
radeon_emit(cs, PKT3(PKT3_COPY_DATA, 4, 0));
|
||||
radeon_emit(cs, COPY_DATA_COUNT_SEL |
|
||||
COPY_DATA_SRC_SEL(COPY_DATA_TIMESTAMP) |
|
||||
COPY_DATA_DST_SEL(COPY_DATA_DST_MEM));
|
||||
radeon_emit(cs, 0);
|
||||
radeon_emit(cs, 0);
|
||||
radeon_emit(cs, va);
|
||||
radeon_emit(cs, va >> 32);
|
||||
si_cp_release_mem(sctx, V_028A90_BOTTOM_OF_PIPE_TS, 0,
|
||||
EOP_DST_SEL_MEM, EOP_INT_SEL_NONE,
|
||||
EOP_DATA_SEL_TIMESTAMP, NULL, va,
|
||||
0, query->b.type);
|
||||
break;
|
||||
case PIPE_QUERY_PIPELINE_STATISTICS:
|
||||
radeon_emit(cs, PKT3(PKT3_EVENT_WRITE, 2, 0));
|
||||
|
@@ -101,6 +101,10 @@ static const uint64_t centroid_priority_4x = 0x3210321032103210ull;
|
||||
static const uint32_t sample_locs_8x[] = {
|
||||
FILL_SREG(-3,-5, 5, 1, -1, 3, 7,-7),
|
||||
FILL_SREG(-7,-1, 3, 7, -5, 5, 1,-3),
|
||||
/* The following are unused by hardware, but we emit them to IBs
|
||||
* instead of multiple SET_CONTEXT_REG packets. */
|
||||
0,
|
||||
0,
|
||||
};
|
||||
static const uint64_t centroid_priority_8x = 0x3546012735460127ull;
|
||||
|
||||
|
@@ -106,7 +106,6 @@ static void virgl_buffer_transfer_unmap(struct pipe_context *ctx,
|
||||
if (trans->base.usage & PIPE_TRANSFER_WRITE) {
|
||||
if (!(transfer->usage & PIPE_TRANSFER_FLUSH_EXPLICIT)) {
|
||||
struct virgl_screen *vs = virgl_screen(ctx->screen);
|
||||
vbuf->base.clean = FALSE;
|
||||
vctx->num_transfers++;
|
||||
vs->vws->transfer_put(vs->vws, vbuf->base.hw_res,
|
||||
&transfer->box, trans->base.stride, trans->base.layer_stride, trans->offset, transfer->level);
|
||||
|
@@ -61,6 +61,12 @@ static void virgl_encoder_write_res(struct virgl_context *ctx,
|
||||
}
|
||||
}
|
||||
|
||||
static void virgl_dirty_res(struct virgl_resource *res)
|
||||
{
|
||||
if (res)
|
||||
res->clean = FALSE;
|
||||
}
|
||||
|
||||
int virgl_encode_bind_object(struct virgl_context *ctx,
|
||||
uint32_t handle, uint32_t object)
|
||||
{
|
||||
@@ -615,6 +621,7 @@ int virgl_encode_sampler_view(struct virgl_context *ctx,
|
||||
if (res->u.b.target == PIPE_BUFFER) {
|
||||
virgl_encoder_write_dword(ctx->cbuf, state->u.buf.offset / elem_size);
|
||||
virgl_encoder_write_dword(ctx->cbuf, (state->u.buf.offset + state->u.buf.size) / elem_size - 1);
|
||||
virgl_dirty_res(res);
|
||||
} else {
|
||||
virgl_encoder_write_dword(ctx->cbuf, state->u.tex.first_layer | state->u.tex.last_layer << 16);
|
||||
virgl_encoder_write_dword(ctx->cbuf, state->u.tex.first_level | state->u.tex.last_level << 8);
|
||||
@@ -949,6 +956,7 @@ int virgl_encode_set_shader_buffers(struct virgl_context *ctx,
|
||||
virgl_encoder_write_dword(ctx->cbuf, buffers[i].buffer_offset);
|
||||
virgl_encoder_write_dword(ctx->cbuf, buffers[i].buffer_size);
|
||||
virgl_encoder_write_res(ctx, res);
|
||||
virgl_dirty_res(res);
|
||||
} else {
|
||||
virgl_encoder_write_dword(ctx->cbuf, 0);
|
||||
virgl_encoder_write_dword(ctx->cbuf, 0);
|
||||
@@ -972,6 +980,7 @@ int virgl_encode_set_hw_atomic_buffers(struct virgl_context *ctx,
|
||||
virgl_encoder_write_dword(ctx->cbuf, buffers[i].buffer_offset);
|
||||
virgl_encoder_write_dword(ctx->cbuf, buffers[i].buffer_size);
|
||||
virgl_encoder_write_res(ctx, res);
|
||||
virgl_dirty_res(res);
|
||||
} else {
|
||||
virgl_encoder_write_dword(ctx->cbuf, 0);
|
||||
virgl_encoder_write_dword(ctx->cbuf, 0);
|
||||
@@ -999,6 +1008,7 @@ int virgl_encode_set_shader_images(struct virgl_context *ctx,
|
||||
virgl_encoder_write_dword(ctx->cbuf, images[i].u.buf.offset);
|
||||
virgl_encoder_write_dword(ctx->cbuf, images[i].u.buf.size);
|
||||
virgl_encoder_write_res(ctx, res);
|
||||
virgl_dirty_res(res);
|
||||
} else {
|
||||
virgl_encoder_write_dword(ctx->cbuf, 0);
|
||||
virgl_encoder_write_dword(ctx->cbuf, 0);
|
||||
|
@@ -95,7 +95,11 @@ static void virgl_buffer_subdata(struct pipe_context *pipe,
|
||||
usage |= PIPE_TRANSFER_DISCARD_RANGE;
|
||||
|
||||
u_box_1d(offset, size, &box);
|
||||
virgl_transfer_inline_write(pipe, resource, 0, usage, &box, data, 0, 0);
|
||||
|
||||
if (size >= (VIRGL_MAX_CMDBUF_DWORDS * 4))
|
||||
u_default_buffer_subdata(pipe, resource, usage, offset, size, data);
|
||||
else
|
||||
virgl_transfer_inline_write(pipe, resource, 0, usage, &box, data, 0, 0);
|
||||
}
|
||||
|
||||
void virgl_init_context_resource_functions(struct pipe_context *ctx)
|
||||
|
@@ -31,7 +31,7 @@ struct pipe_fence_handle;
|
||||
struct winsys_handle;
|
||||
struct virgl_hw_res;
|
||||
|
||||
#define VIRGL_MAX_CMDBUF_DWORDS (16*1024)
|
||||
#define VIRGL_MAX_CMDBUF_DWORDS (64 * 1024)
|
||||
|
||||
struct virgl_drm_caps {
|
||||
union virgl_caps caps;
|
||||
|
@@ -421,12 +421,19 @@ static const __DRIextension *drisw_screen_extensions[] = {
|
||||
NULL
|
||||
};
|
||||
|
||||
static struct drisw_loader_funcs drisw_lf = {
|
||||
static const struct drisw_loader_funcs drisw_lf = {
|
||||
.get_image = drisw_get_image,
|
||||
.put_image = drisw_put_image,
|
||||
.put_image2 = drisw_put_image2
|
||||
};
|
||||
|
||||
static const struct drisw_loader_funcs drisw_shm_lf = {
|
||||
.get_image = drisw_get_image,
|
||||
.put_image = drisw_put_image,
|
||||
.put_image2 = drisw_put_image2,
|
||||
.put_image_shm = drisw_put_image_shm
|
||||
};
|
||||
|
||||
static const __DRIconfig **
|
||||
drisw_init_screen(__DRIscreen * sPriv)
|
||||
{
|
||||
@@ -434,6 +441,7 @@ drisw_init_screen(__DRIscreen * sPriv)
|
||||
const __DRIconfig **configs;
|
||||
struct dri_screen *screen;
|
||||
struct pipe_screen *pscreen = NULL;
|
||||
const struct drisw_loader_funcs *lf = &drisw_lf;
|
||||
|
||||
screen = CALLOC_STRUCT(dri_screen);
|
||||
if (!screen)
|
||||
@@ -448,10 +456,10 @@ drisw_init_screen(__DRIscreen * sPriv)
|
||||
sPriv->extensions = drisw_screen_extensions;
|
||||
if (loader->base.version >= 4) {
|
||||
if (loader->putImageShm)
|
||||
drisw_lf.put_image_shm = drisw_put_image_shm;
|
||||
lf = &drisw_shm_lf;
|
||||
}
|
||||
|
||||
if (pipe_loader_sw_probe_dri(&screen->dev, &drisw_lf)) {
|
||||
if (pipe_loader_sw_probe_dri(&screen->dev, lf)) {
|
||||
dri_init_options(screen);
|
||||
|
||||
pscreen = pipe_loader_create_screen(screen->dev);
|
||||
|
@@ -91,6 +91,7 @@ xa_context_destroy(struct xa_context *r)
|
||||
}
|
||||
|
||||
r->pipe->destroy(r->pipe);
|
||||
free(r);
|
||||
}
|
||||
|
||||
XA_EXPORT int
|
||||
|
@@ -27,6 +27,7 @@ AM_CFLAGS = \
|
||||
$(GALLIUM_CFLAGS) \
|
||||
$(VISIBILITY_CFLAGS) \
|
||||
$(VL_CFLAGS) \
|
||||
$(X11_INCLUDES) \
|
||||
$(XCB_DRI3_CFLAGS) \
|
||||
$(XVMC_CFLAGS)
|
||||
|
||||
|
@@ -1310,6 +1310,12 @@ static struct pb_buffer *amdgpu_bo_from_handle(struct radeon_winsys *rws,
|
||||
if (bo) {
|
||||
p_atomic_inc(&bo->base.reference.count);
|
||||
simple_mtx_unlock(&ws->bo_export_table_lock);
|
||||
|
||||
/* Release the buffer handle, because we don't need it anymore.
|
||||
* This function is returning an existing buffer, which has its own
|
||||
* handle.
|
||||
*/
|
||||
amdgpu_bo_free(result.buf_handle);
|
||||
return &bo->base;
|
||||
}
|
||||
|
||||
|
@@ -280,6 +280,12 @@ amdgpu_winsys_create(int fd, const struct pipe_screen_config *config,
|
||||
if (ws) {
|
||||
pipe_reference(NULL, &ws->reference);
|
||||
simple_mtx_unlock(&dev_tab_mutex);
|
||||
|
||||
/* Release the device handle, because we don't need it anymore.
|
||||
* This function is returning an existing winsys instance, which
|
||||
* has its own device handle.
|
||||
*/
|
||||
amdgpu_device_deinitialize(dev);
|
||||
return &ws->base;
|
||||
}
|
||||
|
||||
|
@@ -1198,4 +1198,6 @@ void
|
||||
vmw_ioctl_cleanup(struct vmw_winsys_screen *vws)
|
||||
{
|
||||
VMW_FUNC;
|
||||
|
||||
free(vws->ioctl.cap_3d);
|
||||
}
|
||||
|
@@ -62,7 +62,7 @@ struct dri_sw_winsys
|
||||
{
|
||||
struct sw_winsys base;
|
||||
|
||||
struct drisw_loader_funcs *lf;
|
||||
const struct drisw_loader_funcs *lf;
|
||||
};
|
||||
|
||||
static inline struct dri_sw_displaytarget *
|
||||
@@ -282,7 +282,7 @@ dri_destroy_sw_winsys(struct sw_winsys *winsys)
|
||||
}
|
||||
|
||||
struct sw_winsys *
|
||||
dri_create_sw_winsys(struct drisw_loader_funcs *lf)
|
||||
dri_create_sw_winsys(const struct drisw_loader_funcs *lf)
|
||||
{
|
||||
struct dri_sw_winsys *ws;
|
||||
|
||||
|
@@ -33,6 +33,6 @@
|
||||
|
||||
struct sw_winsys;
|
||||
|
||||
struct sw_winsys *dri_create_sw_winsys(struct drisw_loader_funcs *lf);
|
||||
struct sw_winsys *dri_create_sw_winsys(const struct drisw_loader_funcs *lf);
|
||||
|
||||
#endif
|
||||
|
@@ -24,10 +24,6 @@ SUBDIRS =
|
||||
|
||||
EXTRA_DIST = SConscript meson.build
|
||||
|
||||
if HAVE_XF86VIDMODE
|
||||
EXTRA_DEFINES_XF86VIDMODE = -DXF86VIDMODE
|
||||
endif
|
||||
|
||||
AM_CFLAGS = \
|
||||
-I$(top_srcdir)/include \
|
||||
-I$(top_srcdir)/include/GL/internal \
|
||||
@@ -38,7 +34,6 @@ AM_CFLAGS = \
|
||||
-I$(top_builddir)/src/mapi/glapi \
|
||||
-I$(top_srcdir)/src/mapi/glapi \
|
||||
$(VISIBILITY_CFLAGS) \
|
||||
$(EXTRA_DEFINES_XF86VIDMODE) \
|
||||
-D_REENTRANT \
|
||||
-DDEFAULT_DRIVER_DIR=\"$(DRI_DRIVER_SEARCH_DIR)\" \
|
||||
$(DEFINES) \
|
||||
|
@@ -36,10 +36,7 @@ env.Prepend(LIBS = [
|
||||
env.PkgUseModules('X11')
|
||||
env.PkgUseModules('XCB')
|
||||
env.PkgUseModules('DRM')
|
||||
|
||||
if env['HAVE_XF86VIDMODE']:
|
||||
env.Append(CPPDEFINES = ['XF86VIDMODE'])
|
||||
env.PkgUseModules('XF86VIDMODE')
|
||||
env.PkgUseModules('XF86VIDMODE')
|
||||
|
||||
sources = [
|
||||
'clientattrib.c',
|
||||
|
@@ -46,11 +46,9 @@
|
||||
#include "util/debug.h"
|
||||
#else
|
||||
#include <sys/time.h>
|
||||
#ifdef XF86VIDMODE
|
||||
#include <X11/extensions/xf86vmode.h>
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <X11/Xlib-xcb.h>
|
||||
#include <xcb/xcb.h>
|
||||
@@ -2071,7 +2069,6 @@ _X_HIDDEN GLboolean
|
||||
__glxGetMscRate(struct glx_screen *psc,
|
||||
int32_t * numerator, int32_t * denominator)
|
||||
{
|
||||
#ifdef XF86VIDMODE
|
||||
XF86VidModeModeLine mode_line;
|
||||
int dot_clock;
|
||||
int i;
|
||||
@@ -2118,8 +2115,6 @@ __glxGetMscRate(struct glx_screen *psc,
|
||||
|
||||
return True;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
|
||||
return False;
|
||||
}
|
||||
@@ -2145,7 +2140,7 @@ _X_HIDDEN GLboolean
|
||||
__glXGetMscRateOML(Display * dpy, GLXDrawable drawable,
|
||||
int32_t * numerator, int32_t * denominator)
|
||||
{
|
||||
#if defined( GLX_DIRECT_RENDERING ) && defined( XF86VIDMODE )
|
||||
#if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
|
||||
__GLXDRIdrawable *draw = GetGLXDRIDrawable(dpy, drawable);
|
||||
|
||||
if (draw == NULL)
|
||||
|
@@ -137,10 +137,6 @@ gl_lib_cargs = [
|
||||
'-DDEFAULT_DRIVER_DIR="@0@"'.format(dri_search_path),
|
||||
]
|
||||
|
||||
if dep_xxf86vm.found()
|
||||
gl_lib_cargs += '-DHAVE_XF86VIDMODE'
|
||||
endif
|
||||
|
||||
libglx = static_library(
|
||||
'glx',
|
||||
[files_libglx, glx_generated],
|
||||
@@ -167,7 +163,7 @@ if with_glx == 'dri'
|
||||
link_args : [ld_args_bsymbolic, ld_args_gc_sections, extra_ld_args_libgl],
|
||||
dependencies : [
|
||||
dep_libdrm, dep_dl, dep_m, dep_thread, dep_x11, dep_xcb_glx, dep_xcb,
|
||||
dep_x11_xcb, dep_xcb_dri2, dep_xext, dep_xfixes, dep_xdamage,
|
||||
dep_x11_xcb, dep_xcb_dri2, dep_xext, dep_xfixes, dep_xdamage, dep_xxf86vm,
|
||||
extra_deps_libgl,
|
||||
],
|
||||
version : gl_lib_version,
|
||||
|
@@ -4804,7 +4804,6 @@ fs_visitor::nir_emit_intrinsic(const fs_builder &bld, nir_intrinsic_instr *instr
|
||||
break;
|
||||
}
|
||||
|
||||
case nir_intrinsic_begin_fragment_shader_ordering:
|
||||
case nir_intrinsic_begin_invocation_interlock: {
|
||||
const fs_builder ubld = bld.group(8, 0);
|
||||
const fs_reg tmp = ubld.vgrf(BRW_REGISTER_TYPE_UD, 2);
|
||||
|
@@ -636,7 +636,7 @@ VkResult anv_CreateInstance(
|
||||
}
|
||||
|
||||
if (instance->app_info.api_version == 0)
|
||||
anv_EnumerateInstanceVersion(&instance->app_info.api_version);
|
||||
instance->app_info.api_version = VK_API_VERSION_1_0;
|
||||
|
||||
instance->enabled_extensions = enabled_extensions;
|
||||
|
||||
|
@@ -446,6 +446,9 @@ anv_pipeline_hash_graphics(struct anv_pipeline *pipeline,
|
||||
if (layout)
|
||||
_mesa_sha1_update(&ctx, layout->sha1, sizeof(layout->sha1));
|
||||
|
||||
const bool rba = pipeline->device->robust_buffer_access;
|
||||
_mesa_sha1_update(&ctx, &rba, sizeof(rba));
|
||||
|
||||
for (unsigned s = 0; s < MESA_SHADER_STAGES; s++) {
|
||||
if (stages[s].entrypoint)
|
||||
anv_pipeline_hash_shader(&ctx, &stages[s]);
|
||||
@@ -466,6 +469,9 @@ anv_pipeline_hash_compute(struct anv_pipeline *pipeline,
|
||||
if (layout)
|
||||
_mesa_sha1_update(&ctx, layout->sha1, sizeof(layout->sha1));
|
||||
|
||||
const bool rba = pipeline->device->robust_buffer_access;
|
||||
_mesa_sha1_update(&ctx, &rba, sizeof(rba));
|
||||
|
||||
anv_pipeline_hash_shader(&ctx, stage);
|
||||
|
||||
_mesa_sha1_final(&ctx, sha1_out);
|
||||
|
@@ -1747,6 +1747,13 @@ enum anv_pipe_bits {
|
||||
* we would have to CS stall on every flush which could be bad.
|
||||
*/
|
||||
ANV_PIPE_NEEDS_CS_STALL_BIT = (1 << 21),
|
||||
|
||||
/* This bit does not exist directly in PIPE_CONTROL. It means that render
|
||||
* target operations are ongoing. Some operations like copies on the
|
||||
* command streamer might need to be aware of this to trigger the
|
||||
* appropriate stall before they can proceed with the copy.
|
||||
*/
|
||||
ANV_PIPE_RENDER_TARGET_WRITES = (1 << 22),
|
||||
};
|
||||
|
||||
#define ANV_PIPE_FLUSH_BITS ( \
|
||||
|
@@ -263,4 +263,5 @@ genX(blorp_exec)(struct blorp_batch *batch,
|
||||
cmd_buffer->state.gfx.vb_dirty = ~0;
|
||||
cmd_buffer->state.gfx.dirty = ~0;
|
||||
cmd_buffer->state.push_constants_dirty = ~0;
|
||||
cmd_buffer->state.pending_pipe_bits |= ANV_PIPE_RENDER_TARGET_WRITES;
|
||||
}
|
||||
|
@@ -1758,6 +1758,12 @@ genX(cmd_buffer_apply_pipe_flushes)(struct anv_cmd_buffer *cmd_buffer)
|
||||
pipe.StallAtPixelScoreboard = true;
|
||||
}
|
||||
|
||||
/* If a render target flush was emitted, then we can toggle off the bit
|
||||
* saying that render target writes are ongoing.
|
||||
*/
|
||||
if (bits & ANV_PIPE_RENDER_TARGET_CACHE_FLUSH_BIT)
|
||||
bits &= ~(ANV_PIPE_RENDER_TARGET_WRITES);
|
||||
|
||||
bits &= ~(ANV_PIPE_FLUSH_BITS | ANV_PIPE_CS_STALL_BIT);
|
||||
}
|
||||
|
||||
@@ -2769,6 +2775,8 @@ void genX(CmdDraw)(
|
||||
prim.StartInstanceLocation = firstInstance;
|
||||
prim.BaseVertexLocation = 0;
|
||||
}
|
||||
|
||||
cmd_buffer->state.pending_pipe_bits |= ANV_PIPE_RENDER_TARGET_WRITES;
|
||||
}
|
||||
|
||||
void genX(CmdDrawIndexed)(
|
||||
@@ -2808,6 +2816,8 @@ void genX(CmdDrawIndexed)(
|
||||
prim.StartInstanceLocation = firstInstance;
|
||||
prim.BaseVertexLocation = vertexOffset;
|
||||
}
|
||||
|
||||
cmd_buffer->state.pending_pipe_bits |= ANV_PIPE_RENDER_TARGET_WRITES;
|
||||
}
|
||||
|
||||
/* Auto-Draw / Indirect Registers */
|
||||
@@ -2941,6 +2951,8 @@ void genX(CmdDrawIndirect)(
|
||||
|
||||
offset += stride;
|
||||
}
|
||||
|
||||
cmd_buffer->state.pending_pipe_bits |= ANV_PIPE_RENDER_TARGET_WRITES;
|
||||
}
|
||||
|
||||
void genX(CmdDrawIndexedIndirect)(
|
||||
@@ -2980,6 +2992,8 @@ void genX(CmdDrawIndexedIndirect)(
|
||||
|
||||
offset += stride;
|
||||
}
|
||||
|
||||
cmd_buffer->state.pending_pipe_bits |= ANV_PIPE_RENDER_TARGET_WRITES;
|
||||
}
|
||||
|
||||
static VkResult
|
||||
|
@@ -302,4 +302,5 @@ genX(cmd_buffer_so_memcpy)(struct anv_cmd_buffer *cmd_buffer,
|
||||
}
|
||||
|
||||
cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_PIPELINE;
|
||||
cmd_buffer->state.pending_pipe_bits |= ANV_PIPE_RENDER_TARGET_WRITES;
|
||||
}
|
||||
|
@@ -729,11 +729,19 @@ void genX(CmdCopyQueryPoolResults)(
|
||||
ANV_FROM_HANDLE(anv_query_pool, pool, queryPool);
|
||||
ANV_FROM_HANDLE(anv_buffer, buffer, destBuffer);
|
||||
|
||||
if (flags & VK_QUERY_RESULT_WAIT_BIT) {
|
||||
anv_batch_emit(&cmd_buffer->batch, GENX(PIPE_CONTROL), pc) {
|
||||
pc.CommandStreamerStallEnable = true;
|
||||
pc.StallAtPixelScoreboard = true;
|
||||
}
|
||||
/* If render target writes are ongoing, request a render target cache flush
|
||||
* to ensure proper ordering of the commands from the 3d pipe and the
|
||||
* command streamer.
|
||||
*/
|
||||
if (cmd_buffer->state.pending_pipe_bits & ANV_PIPE_RENDER_TARGET_WRITES) {
|
||||
cmd_buffer->state.pending_pipe_bits |=
|
||||
ANV_PIPE_RENDER_TARGET_CACHE_FLUSH_BIT;
|
||||
}
|
||||
|
||||
if ((flags & VK_QUERY_RESULT_WAIT_BIT) ||
|
||||
(cmd_buffer->state.pending_pipe_bits & ANV_PIPE_FLUSH_BITS)) {
|
||||
cmd_buffer->state.pending_pipe_bits |= ANV_PIPE_CS_STALL_BIT;
|
||||
genX(cmd_buffer_apply_pipe_flushes)(cmd_buffer);
|
||||
}
|
||||
|
||||
struct anv_address dest_addr = anv_address_add(buffer->address, destOffset);
|
||||
|
@@ -40,7 +40,7 @@ libglapi = shared_library(
|
||||
'glapi',
|
||||
[files_mapi_glapi, files_mapi_util, shared_glapi_mapi_tmp_h],
|
||||
c_args : [
|
||||
c_msvc_compat_args, '-DMAPI_MODE_GLAPI',
|
||||
c_msvc_compat_args, c_vis_args, '-DMAPI_MODE_GLAPI',
|
||||
'-DMAPI_ABI_HEADER="@0@"'.format(shared_glapi_mapi_tmp_h.full_path()),
|
||||
],
|
||||
link_args : [ld_args_gc_sections],
|
||||
|
@@ -167,7 +167,7 @@ static void
|
||||
brw_dispatch_compute_common(struct gl_context *ctx)
|
||||
{
|
||||
struct brw_context *brw = brw_context(ctx);
|
||||
bool fail_next = false;
|
||||
bool fail_next;
|
||||
|
||||
if (!_mesa_check_conditional_render(ctx))
|
||||
return;
|
||||
@@ -185,6 +185,7 @@ brw_dispatch_compute_common(struct gl_context *ctx)
|
||||
intel_batchbuffer_require_space(brw, 600);
|
||||
brw_require_statebuffer_space(brw, 2500);
|
||||
intel_batchbuffer_save_state(brw);
|
||||
fail_next = intel_batchbuffer_saved_state_is_empty(brw);
|
||||
|
||||
retry:
|
||||
brw->batch.no_wrap = true;
|
||||
|
@@ -885,7 +885,7 @@ brw_draw_single_prim(struct gl_context *ctx,
|
||||
{
|
||||
struct brw_context *brw = brw_context(ctx);
|
||||
const struct gen_device_info *devinfo = &brw->screen->devinfo;
|
||||
bool fail_next = false;
|
||||
bool fail_next;
|
||||
|
||||
/* Flag BRW_NEW_DRAW_CALL on every draw. This allows us to have
|
||||
* atoms that happen on every draw call.
|
||||
@@ -898,6 +898,7 @@ brw_draw_single_prim(struct gl_context *ctx,
|
||||
intel_batchbuffer_require_space(brw, 1500);
|
||||
brw_require_statebuffer_space(brw, 2400);
|
||||
intel_batchbuffer_save_state(brw);
|
||||
fail_next = intel_batchbuffer_saved_state_is_empty(brw);
|
||||
|
||||
if (brw->num_instances != prim->num_instances ||
|
||||
brw->basevertex != prim->basevertex ||
|
||||
|
@@ -309,6 +309,7 @@ retry:
|
||||
intel_batchbuffer_require_space(brw, 1400);
|
||||
brw_require_statebuffer_space(brw, 600);
|
||||
intel_batchbuffer_save_state(brw);
|
||||
check_aperture_failed_once |= intel_batchbuffer_saved_state_is_empty(brw);
|
||||
brw->batch.no_wrap = true;
|
||||
|
||||
#if GEN_GEN == 6
|
||||
|
@@ -301,6 +301,13 @@ intel_batchbuffer_save_state(struct brw_context *brw)
|
||||
brw->batch.saved.exec_count = brw->batch.exec_count;
|
||||
}
|
||||
|
||||
bool
|
||||
intel_batchbuffer_saved_state_is_empty(struct brw_context *brw)
|
||||
{
|
||||
struct intel_batchbuffer *batch = &brw->batch;
|
||||
return (batch->saved.map_next == batch->batch.map);
|
||||
}
|
||||
|
||||
void
|
||||
intel_batchbuffer_reset_to_saved(struct brw_context *brw)
|
||||
{
|
||||
|
@@ -24,6 +24,7 @@ struct intel_batchbuffer;
|
||||
void intel_batchbuffer_init(struct brw_context *brw);
|
||||
void intel_batchbuffer_free(struct intel_batchbuffer *batch);
|
||||
void intel_batchbuffer_save_state(struct brw_context *brw);
|
||||
bool intel_batchbuffer_saved_state_is_empty(struct brw_context *brw);
|
||||
void intel_batchbuffer_reset_to_saved(struct brw_context *brw);
|
||||
void intel_batchbuffer_require_space(struct brw_context *brw, GLuint sz);
|
||||
int _intel_batchbuffer_flush_fence(struct brw_context *brw,
|
||||
|
@@ -247,7 +247,6 @@ intelInitExtensions(struct gl_context *ctx)
|
||||
ctx->Extensions.OES_primitive_bounding_box = true;
|
||||
ctx->Extensions.OES_texture_buffer = true;
|
||||
ctx->Extensions.ARB_fragment_shader_interlock = true;
|
||||
ctx->Extensions.INTEL_fragment_shader_ordering = true;
|
||||
|
||||
if (can_do_pipelined_register_writes(brw->screen)) {
|
||||
ctx->Extensions.ARB_draw_indirect = true;
|
||||
|
@@ -317,7 +317,6 @@ EXT(IBM_texture_mirrored_repeat , dummy_true
|
||||
EXT(INGR_blend_func_separate , EXT_blend_func_separate , GLL, x , x , x , 1999)
|
||||
|
||||
EXT(INTEL_conservative_rasterization , INTEL_conservative_rasterization , x , GLC, x , 31, 2013)
|
||||
EXT(INTEL_fragment_shader_ordering , INTEL_fragment_shader_ordering , GLL, GLC, x , x , 2013)
|
||||
EXT(INTEL_performance_query , INTEL_performance_query , GLL, GLC, x , ES2, 2013)
|
||||
EXT(INTEL_shader_atomic_float_minmax , INTEL_shader_atomic_float_minmax , GLL, GLC, x , x , 2018)
|
||||
|
||||
|
@@ -4296,7 +4296,6 @@ struct gl_extensions
|
||||
GLboolean ATI_fragment_shader;
|
||||
GLboolean GREMEDY_string_marker;
|
||||
GLboolean INTEL_conservative_rasterization;
|
||||
GLboolean INTEL_fragment_shader_ordering;
|
||||
GLboolean INTEL_performance_query;
|
||||
GLboolean INTEL_shader_atomic_float_minmax;
|
||||
GLboolean KHR_blend_equation_advanced;
|
||||
|
@@ -900,8 +900,7 @@ select_tex_image(const struct gl_texture_object *texObj, GLenum target,
|
||||
|
||||
/**
|
||||
* Error-check the offset and size arguments to
|
||||
* glGet[Compressed]TextureSubImage(). Also checks if the specified
|
||||
* texture image is missing.
|
||||
* glGet[Compressed]TextureSubImage().
|
||||
* \return true if error, false if no error.
|
||||
*/
|
||||
static bool
|
||||
@@ -913,6 +912,7 @@ dimensions_error_check(struct gl_context *ctx,
|
||||
const char *caller)
|
||||
{
|
||||
const struct gl_texture_image *texImage;
|
||||
GLuint imageWidth = 0, imageHeight = 0, imageDepth = 0;
|
||||
|
||||
if (xoffset < 0) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE, "%s(xoffset = %d)", caller, xoffset);
|
||||
@@ -981,82 +981,44 @@ dimensions_error_check(struct gl_context *ctx,
|
||||
"%s(zoffset + depth = %d)", caller, zoffset + depth);
|
||||
return true;
|
||||
}
|
||||
/* According to OpenGL 4.6 spec, section 8.11.4 ("Texture Image Queries"):
|
||||
*
|
||||
* "An INVALID_OPERATION error is generated by GetTextureImage if the
|
||||
* effective target is TEXTURE_CUBE_MAP or TEXTURE_CUBE_MAP_ARRAY ,
|
||||
* and the texture object is not cube complete or cube array complete,
|
||||
* respectively."
|
||||
*
|
||||
* This applies also to GetTextureSubImage, GetCompressedTexImage,
|
||||
* GetCompressedTextureImage, and GetnCompressedTexImage.
|
||||
*/
|
||||
if (!_mesa_cube_complete(texObj)) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"%s(cube incomplete)", caller);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
; /* nothing */
|
||||
}
|
||||
|
||||
texImage = select_tex_image(texObj, target, level, zoffset);
|
||||
if (!texImage) {
|
||||
/* Trying to return a non-defined level is a valid operation per se, as
|
||||
* OpenGL 4.6 spec, section 8.11.4 ("Texture Image Queries") does not
|
||||
* handle this case as an error.
|
||||
*
|
||||
* Rather, we need to look at section 8.22 ("Texture State and Proxy
|
||||
* State"):
|
||||
*
|
||||
* "Each initial texture image is null. It has zero width, height, and
|
||||
* depth, internal format RGBA, or R8 for buffer textures, component
|
||||
* sizes set to zero and component types set to NONE, the compressed
|
||||
* flag set to FALSE, a zero compressed size, and the bound buffer
|
||||
* object name is zero."
|
||||
*
|
||||
* This means we need to assume the image for the non-defined level is
|
||||
* an empty image. With this assumption, we can go back to section
|
||||
* 8.11.4 and checking again the errors:
|
||||
*
|
||||
* "An INVALID_VALUE error is generated if xoffset + width is greater
|
||||
* than the texture’s width, yoffset + height is greater than the
|
||||
* texture’s height, or zoffset + depth is greater than the texture’s
|
||||
* depth."
|
||||
*
|
||||
* Thus why we return INVALID_VALUE.
|
||||
*/
|
||||
_mesa_error(ctx, GL_INVALID_VALUE, "%s(missing image)", caller);
|
||||
return true;
|
||||
if (texImage) {
|
||||
imageWidth = texImage->Width;
|
||||
imageHeight = texImage->Height;
|
||||
imageDepth = texImage->Depth;
|
||||
}
|
||||
|
||||
if (xoffset + width > texImage->Width) {
|
||||
if (xoffset + width > imageWidth) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE,
|
||||
"%s(xoffset %d + width %d > %u)",
|
||||
caller, xoffset, width, texImage->Width);
|
||||
caller, xoffset, width, imageWidth);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (yoffset + height > texImage->Height) {
|
||||
if (yoffset + height > imageHeight) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE,
|
||||
"%s(yoffset %d + height %d > %u)",
|
||||
caller, yoffset, height, texImage->Height);
|
||||
caller, yoffset, height, imageHeight);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (target != GL_TEXTURE_CUBE_MAP) {
|
||||
/* Cube map error checking was done above */
|
||||
if (zoffset + depth > texImage->Depth) {
|
||||
if (zoffset + depth > imageDepth) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE,
|
||||
"%s(zoffset %d + depth %d > %u)",
|
||||
caller, zoffset, depth, texImage->Depth);
|
||||
caller, zoffset, depth, imageDepth);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/* Extra checks for compressed textures */
|
||||
{
|
||||
if (texImage) {
|
||||
GLuint bw, bh, bd;
|
||||
_mesa_get_format_block_size_3d(texImage->TexFormat, &bw, &bh, &bd);
|
||||
if (bw > 1 || bh > 1 || bd > 1) {
|
||||
@@ -1162,53 +1124,15 @@ pbo_error_check(struct gl_context *ctx, GLenum target,
|
||||
|
||||
|
||||
/**
|
||||
* Do error checking for all (non-compressed) get-texture-image functions.
|
||||
* \return true if any error, false if no errors.
|
||||
* Do teximage-related error checking for getting uncompressed images.
|
||||
* \return true if there was an error
|
||||
*/
|
||||
static bool
|
||||
getteximage_error_check(struct gl_context *ctx,
|
||||
struct gl_texture_object *texObj,
|
||||
GLenum target, GLint level,
|
||||
GLint xoffset, GLint yoffset, GLint zoffset,
|
||||
GLsizei width, GLsizei height, GLsizei depth,
|
||||
GLenum format, GLenum type, GLsizei bufSize,
|
||||
GLvoid *pixels, const char *caller)
|
||||
teximage_error_check(struct gl_context *ctx,
|
||||
struct gl_texture_image *texImage,
|
||||
GLenum format, const char *caller)
|
||||
{
|
||||
struct gl_texture_image *texImage;
|
||||
GLenum baseFormat, err;
|
||||
GLint maxLevels;
|
||||
|
||||
assert(texObj);
|
||||
|
||||
if (texObj->Target == 0) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION, "%s(invalid texture)", caller);
|
||||
return true;
|
||||
}
|
||||
|
||||
maxLevels = _mesa_max_texture_levels(ctx, target);
|
||||
if (level < 0 || level >= maxLevels) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE, "%s(level = %d)", caller, level);
|
||||
return true;
|
||||
}
|
||||
|
||||
err = _mesa_error_check_format_and_type(ctx, format, type);
|
||||
if (err != GL_NO_ERROR) {
|
||||
_mesa_error(ctx, err, "%s(format/type)", caller);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (dimensions_error_check(ctx, texObj, target, level,
|
||||
xoffset, yoffset, zoffset,
|
||||
width, height, depth, caller)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (pbo_error_check(ctx, target, width, height, depth,
|
||||
format, type, bufSize, pixels, caller)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
texImage = select_tex_image(texObj, target, level, zoffset);
|
||||
GLenum baseFormat;
|
||||
assert(texImage);
|
||||
|
||||
/*
|
||||
@@ -1241,8 +1165,8 @@ getteximage_error_check(struct gl_context *ctx,
|
||||
return true;
|
||||
}
|
||||
else if (_mesa_is_stencil_format(format)
|
||||
&& !_mesa_is_depthstencil_format(baseFormat)
|
||||
&& !_mesa_is_stencil_format(baseFormat)) {
|
||||
&& !_mesa_is_depthstencil_format(baseFormat)
|
||||
&& !_mesa_is_stencil_format(baseFormat)) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"%s(format mismatch)", caller);
|
||||
return true;
|
||||
@@ -1271,6 +1195,142 @@ getteximage_error_check(struct gl_context *ctx,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Do common teximage-related error checking for getting uncompressed images.
|
||||
* \return true if there was an error
|
||||
*/
|
||||
static bool
|
||||
common_error_check(struct gl_context *ctx,
|
||||
struct gl_texture_object *texObj,
|
||||
GLenum target, GLint level,
|
||||
GLsizei width, GLsizei height, GLsizei depth,
|
||||
GLenum format, GLenum type, GLsizei bufSize,
|
||||
GLvoid *pixels, const char *caller)
|
||||
{
|
||||
GLenum err;
|
||||
GLint maxLevels;
|
||||
|
||||
if (texObj->Target == 0) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION, "%s(invalid texture)", caller);
|
||||
return true;
|
||||
}
|
||||
|
||||
maxLevels = _mesa_max_texture_levels(ctx, target);
|
||||
if (level < 0 || level >= maxLevels) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE, "%s(level = %d)", caller, level);
|
||||
return true;
|
||||
}
|
||||
|
||||
err = _mesa_error_check_format_and_type(ctx, format, type);
|
||||
if (err != GL_NO_ERROR) {
|
||||
_mesa_error(ctx, err, "%s(format/type)", caller);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* According to OpenGL 4.6 spec, section 8.11.4 ("Texture Image Queries"):
|
||||
*
|
||||
* "An INVALID_OPERATION error is generated by GetTextureImage if the
|
||||
* effective target is TEXTURE_CUBE_MAP or TEXTURE_CUBE_MAP_ARRAY ,
|
||||
* and the texture object is not cube complete or cube array complete,
|
||||
* respectively."
|
||||
*
|
||||
* This applies also to GetTextureSubImage, GetCompressedTexImage,
|
||||
* GetCompressedTextureImage, and GetnCompressedTexImage.
|
||||
*/
|
||||
if (target == GL_TEXTURE_CUBE_MAP && !_mesa_cube_complete(texObj)) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"%s(cube incomplete)", caller);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Do error checking for all (non-compressed) get-texture-image functions.
|
||||
* \return true if any error, false if no errors.
|
||||
*/
|
||||
static bool
|
||||
getteximage_error_check(struct gl_context *ctx,
|
||||
struct gl_texture_object *texObj,
|
||||
GLenum target, GLint level,
|
||||
GLsizei width, GLsizei height, GLsizei depth,
|
||||
GLenum format, GLenum type, GLsizei bufSize,
|
||||
GLvoid *pixels, const char *caller)
|
||||
{
|
||||
struct gl_texture_image *texImage;
|
||||
|
||||
assert(texObj);
|
||||
|
||||
if (common_error_check(ctx, texObj, target, level, width, height, depth,
|
||||
format, type, bufSize, pixels, caller)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (width == 0 || height == 0 || depth == 0) {
|
||||
/* Not an error, but nothing to do. Return 'true' so that the
|
||||
* caller simply returns.
|
||||
*/
|
||||
return true;
|
||||
}
|
||||
|
||||
if (pbo_error_check(ctx, target, width, height, depth,
|
||||
format, type, bufSize, pixels, caller)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
texImage = select_tex_image(texObj, target, level, 0);
|
||||
if (teximage_error_check(ctx, texImage, format, caller)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Do error checking for all (non-compressed) get-texture-image functions.
|
||||
* \return true if any error, false if no errors.
|
||||
*/
|
||||
static bool
|
||||
gettexsubimage_error_check(struct gl_context *ctx,
|
||||
struct gl_texture_object *texObj,
|
||||
GLenum target, GLint level,
|
||||
GLint xoffset, GLint yoffset, GLint zoffset,
|
||||
GLsizei width, GLsizei height, GLsizei depth,
|
||||
GLenum format, GLenum type, GLsizei bufSize,
|
||||
GLvoid *pixels, const char *caller)
|
||||
{
|
||||
struct gl_texture_image *texImage;
|
||||
|
||||
assert(texObj);
|
||||
|
||||
if (common_error_check(ctx, texObj, target, level, width, height, depth,
|
||||
format, type, bufSize, pixels, caller)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (dimensions_error_check(ctx, texObj, target, level,
|
||||
xoffset, yoffset, zoffset,
|
||||
width, height, depth, caller)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (pbo_error_check(ctx, target, width, height, depth,
|
||||
format, type, bufSize, pixels, caller)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
texImage = select_tex_image(texObj, target, level, zoffset);
|
||||
if (teximage_error_check(ctx, texImage, format, caller)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the width, height and depth of a texture image.
|
||||
* This function must be resilient to bad parameter values since
|
||||
@@ -1399,7 +1459,7 @@ _mesa_GetnTexImageARB(GLenum target, GLint level, GLenum format, GLenum type,
|
||||
get_texture_image_dims(texObj, target, level, &width, &height, &depth);
|
||||
|
||||
if (getteximage_error_check(ctx, texObj, target, level,
|
||||
0, 0, 0, width, height, depth,
|
||||
width, height, depth,
|
||||
format, type, bufSize, pixels, caller)) {
|
||||
return;
|
||||
}
|
||||
@@ -1430,7 +1490,7 @@ _mesa_GetTexImage(GLenum target, GLint level, GLenum format, GLenum type,
|
||||
get_texture_image_dims(texObj, target, level, &width, &height, &depth);
|
||||
|
||||
if (getteximage_error_check(ctx, texObj, target, level,
|
||||
0, 0, 0, width, height, depth,
|
||||
width, height, depth,
|
||||
format, type, INT_MAX, pixels, caller)) {
|
||||
return;
|
||||
}
|
||||
@@ -1464,7 +1524,7 @@ _mesa_GetTextureImage(GLuint texture, GLint level, GLenum format, GLenum type,
|
||||
&width, &height, &depth);
|
||||
|
||||
if (getteximage_error_check(ctx, texObj, texObj->Target, level,
|
||||
0, 0, 0, width, height, depth,
|
||||
width, height, depth,
|
||||
format, type, bufSize, pixels, caller)) {
|
||||
return;
|
||||
}
|
||||
@@ -1497,9 +1557,10 @@ _mesa_GetTextureSubImage(GLuint texture, GLint level,
|
||||
return;
|
||||
}
|
||||
|
||||
if (getteximage_error_check(ctx, texObj, texObj->Target, level,
|
||||
xoffset, yoffset, zoffset, width, height, depth,
|
||||
format, type, bufSize, pixels, caller)) {
|
||||
if (gettexsubimage_error_check(ctx, texObj, texObj->Target, level,
|
||||
xoffset, yoffset, zoffset,
|
||||
width, height, depth,
|
||||
format, type, bufSize, pixels, caller)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -4072,7 +4072,6 @@ glsl_to_tgsi_visitor::visit(ir_call *ir)
|
||||
case ir_intrinsic_generic_atomic_comp_swap:
|
||||
case ir_intrinsic_begin_invocation_interlock:
|
||||
case ir_intrinsic_end_invocation_interlock:
|
||||
case ir_intrinsic_begin_fragment_shader_ordering:
|
||||
unreachable("Invalid intrinsic");
|
||||
}
|
||||
}
|
||||
|
@@ -954,8 +954,8 @@ wsi_common_queue_present(const struct wsi_device *wsi,
|
||||
/* We only need/want to wait on semaphores once. After that, we're
|
||||
* guaranteed ordering since it all happens on the same queue.
|
||||
*/
|
||||
submit_info.waitSemaphoreCount = pPresentInfo->waitSemaphoreCount,
|
||||
submit_info.pWaitSemaphores = pPresentInfo->pWaitSemaphores,
|
||||
submit_info.waitSemaphoreCount = pPresentInfo->waitSemaphoreCount;
|
||||
submit_info.pWaitSemaphores = pPresentInfo->pWaitSemaphores;
|
||||
|
||||
/* Set up the pWaitDstStageMasks */
|
||||
stage_flags = vk_alloc(&swapchain->alloc,
|
||||
|
@@ -1062,6 +1062,8 @@ wsi_display_swapchain_destroy(struct wsi_swapchain *drv_chain,
|
||||
|
||||
for (uint32_t i = 0; i < chain->base.image_count; i++)
|
||||
wsi_display_image_finish(drv_chain, allocator, &chain->images[i]);
|
||||
|
||||
wsi_swapchain_finish(&chain->base);
|
||||
vk_free(allocator, chain);
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
Reference in New Issue
Block a user