summaryrefslogtreecommitdiffstats
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* glsl/nir: Add and use a gl_nir_link() functionCaio Marcelo de Oliveira Filho2019-09-104-15/+32
| | | | | | | | | Perform all the NIR linking steps in order. Change iris and i965 to use it. Suggested by Alejandro. v2: Add gl_nir_linker_options struct. Reviewed-by: Alejandro Piñeiro <[email protected]> [v1]
* gallium: Add ARB_gl_spirv supportCaio Marcelo de Oliveira Filho2019-09-104-0/+29
| | | | | | | | | | | | | | The PIPE_CAP_GL_SPIRV capability enables ARB_gl_spirv and ARB_spirv_extensions, and will make sure the corresponding SPIR-V capabilities and extensions lists are initialized. The additional PIPE_CAP_GL_SPIRV_VARIABLE_POINTERS capability enables the support for Variable Pointers in SPIR-V shaders. This depends on the driver and is not mandatory for ARB_gl_spirv support. v2: Add a PIPE_CAP for Variable Pointers. (Marek) Reviewed-by: Alejandro Piñeiro <[email protected]> [v1]
* mesa/spirv: Set a few more extensionsCaio Marcelo de Oliveira Filho2019-09-101-0/+3
| | | | Reviewed-by: Timothy Arceri <[email protected]>
* mesa/st: Don't expect prog->nir to already existCaio Marcelo de Oliveira Filho2019-09-101-6/+5
| | | | | | | | There's no such case, if we load prog->nir from the shader cache, we shouldn't hit this path. Suggested-by: Kenneth Graunke <[email protected]> Reviewed-by: Timothy Arceri <[email protected]>
* mesa/st: Add support for SPIR-V shadersCaio Marcelo de Oliveira Filho2019-09-102-50/+110
| | | | | | | | | | | | | | | | | | | | The SPIR-V codepath uses NIR linking, so we have to preprocess after the linking steps, which makes things slightly different than GLSL. To make more clear when the preprocess is happening, I've ended up inlining st_nir_get_mesa_program() into its caller. The goal was to make both GLSL and SPIR-V to use the same preprocess function, the exceptions are: - SPIR-V codepath don't support NIR state slots yet; - GLSL lowers shared memory early, so we don't do the deref lowering for those. For now I didn't bother to rename other functions and files (now that many of them apply to both GLSL and SPIR-V), but we should do this in further patches. Reviewed-by: Timothy Arceri <[email protected]>
* mesa/st: Extract preprocessing NIR stepsCaio Marcelo de Oliveira Filho2019-09-101-14/+15
| | | | | | | | | | | Refactor to split the glsl_to_nir conversion from the preprocessing NIR passes into separate functions, so we can use them in SPIR-V. Unlike in GLSL, there we'll need to perform a few passes with the NIR linker before doing the individual preprocess calls. No behavior should change with this patch. Reviewed-by: Timothy Arceri <[email protected]>
* mesa/st: Lookup parameters without using namesCaio Marcelo de Oliveira Filho2019-09-101-42/+9
| | | | | | | | | | | Use the new MainUniformStorageIndex field in Parameter instead. It was added so we could match those in the SPIR-V case, where names are optional. v2: Use MainUniformStorageIndex for all cases. Reviewed-by: Alejandro Piñeiro <[email protected]> [v1] Reviewed-by: Timothy Arceri <[email protected]>
* mesa/program: Associate uniform storage without using namesCaio Marcelo de Oliveira Filho2019-09-101-7/+1
| | | | | | | | | | Use the new UniformStorageIndex field in Parameter instead. This mechanism was added so we could match those in the SPIR-V case, where names are optional. v2: Use UniformStorageIndex for all cases. (Timothy) Reviewed-by: Timothy Arceri <[email protected]>
* mesa: Fill Parameter storage indices even when not using SPIR-VCaio Marcelo de Oliveira Filho2019-09-101-1/+17
| | | | | | | | | When creating Parameters, fill in the associated uniform storage indices, like it is done with the NIR linker used for SPIR-V. This will allow later code to not rely on names (which would never work for SPIR-V where names are optional). Reviewed-by: Timothy Arceri <[email protected]>
* glsl/nir: Fill in the Parameters in NIR linkerCaio Marcelo de Oliveira Filho2019-09-105-3/+88
| | | | | | | | | | | | | | | | | | | | | The parameter lists were not being created nor filled since i965 doesn't use them. In Gallium they are used for uniform handling, so add a way to fill them. The gl_uniform_storage struct got two new fields that let us go - from a Parameter to the matching UniformStorage and, - from the variable to the *first* UniformStorage without relying on names -- since they are optional for ARB_gl_spirv. Later patches will make use of them. v2: Do not fill parameters for i965. (Timothy) Use uint32_t for the new attributes. (Marek) v3: Serialize the new fields. (Timothy) Reviewed-by: Timothy Arceri <[email protected]>
* mesa: Pack gl_program_parameter structCaio Marcelo de Oliveira Filho2019-09-101-7/+9
| | | | | | | | | | | | | | The gl_register_file doesn't need 16 bits, so shorten it and use the extra room for 'Padded' (also mark it as a single bit). This shrinks the struct size from 32 bytes to 24 bytes. See also 4794fbc86e3 ("mesa: reduce the size of gl_program_parameter") that shrinked from 40 to 24 and later 7536af670b7 ("glsl: fix shader cache for packed param list") that added `Padded`. v2: Use just 5 bits for gl_register_file. (Timothy) Reviewed-by: Timothy Arceri <[email protected]>
* compiler: Add glsl_contains_opaque() helperCaio Marcelo de Oliveira Filho2019-09-102-0/+7
| | | | Reviewed-by: Alejandro Piñeiro <[email protected]>
* mesa/st: Do not rely on name to identify special uniformsCaio Marcelo de Oliveira Filho2019-09-101-5/+3
| | | | | | | | | | | Every uniform that have the "gl_" name also have some state slots. So use the state_slots like we did in 57b61849310 ("i965: account for NIR uniforms without name"). This removes the dependency on names, which are optional when using ARB_gl_spirv. Reviewed-by: Alejandro Piñeiro <[email protected]>
* glsl/nir: Avoid overflow when setting max_uniform_locationCaio Marcelo de Oliveira Filho2019-09-101-1/+2
| | | | | | | | | Don't use the UNMAPPED_UNIFORM_LOC (-1) to set the unsigned max_uniform_location. Those unmapped uniforms don't have to be accounted at this point. Fixes: 7a9e5cdfbb9 ("nir/linker: Add gl_nir_link_uniforms()") Reviewed-by: Alejandro Piñeiro <[email protected]>
* meson: build getopt when using msvcDylan Baker2019-09-102-0/+34
| | | | | | | | v4: - Don't wrap a single file in a list to match mesa style - Use null_dep instead of empty list Reviewed-by: Eric Anholt <[email protected]> (v3) Reviewed-by: Eric Engestrom <[email protected]>
* glapi: export glapi_destroy_multithread when building shared-glapi on windowsDylan Baker2019-09-102-1/+2
| | | | | | | | | Which will allow meson to build a shared glapi build with mingw. v2: - Add symbol to symbol check test Reviewed-by: Eric Anholt <[email protected]> (v1) Reviewed-by: Eric Engestrom <[email protected]>
* meson: don't build glapi_static_check_table on windowsDylan Baker2019-09-101-1/+3
| | | | | | | It doesn't compile due to undefined symbols, which are in libglapi_static, so I don't understand the problem. Reviewed-by: Eric Engestrom <[email protected]>
* meson: don't try to generate i18n translations on windowsDylan Baker2019-09-101-2/+4
| | | | Reviewed-by: Eric Engestrom <[email protected]>
* glsl/tests: Handle windows \r\n new linesDylan Baker2019-09-101-1/+1
| | | | | | | | | Currently the praser for s expressions assumes that newlines will be \n, resulting in incorrect parsing on windows, where the newline is \r\n. This patch just adds \r? to the regular expression used to parse the s expressions, which fixes at 1 test on windows. Reviewed-by: Eric Engestrom <[email protected]>
* iris: Fix constant buffer sizes for non-UBOsKenneth Graunke2019-09-101-3/+4
| | | | | | | | | Since the system value refactor, we've accidentally only been setting cbuf->buffer_size in the UBO case, and not in the uploaded-constants case. We use cbuf->buffer_size to fill out the SURFACE_STATE entry, so it needs to be initialized in both cases. Fixes: 3b6d787e404 ("iris: move sysvals to their own constant buffer")
* radv/gfx10: declare a LDS symbol for the NGG emit spaceSamuel Pitoiset2019-09-103-32/+19
| | | | | | | | | | | | | This fixes some interactions when NGG GS is enabled. It fixes: - dEQP-VK.clipping.user_defined.clip_cull_distance_dynamic_index.*geom* - dEQP-VK.tessellation.geometry_interaction.passthrough.* For some reasons, using the computed ESGS ring size randomly hangs with CTS. For now, just use the maximum LDS size for ESGS. Signed-off-by: Samuel Pitoiset <[email protected]> Reviewed-by: Bas Nieuwenhuizen <[email protected]>
* radv: calculate GFX9 GS and GFX10 NGG states before compiling shader variantsSamuel Pitoiset2019-09-101-35/+48
| | | | | Signed-off-by: Samuel Pitoiset <[email protected]> Reviewed-by: Bas Nieuwenhuizen <[email protected]>
* radv: store the ESGS ring size as part of gfx10_ngg_infoSamuel Pitoiset2019-09-102-1/+3
| | | | | Signed-off-by: Samuel Pitoiset <[email protected]> Reviewed-by: Bas Nieuwenhuizen <[email protected]>
* radv: store GFX10 NGG state as part of the shader infoSamuel Pitoiset2019-09-102-44/+46
| | | | | Signed-off-by: Samuel Pitoiset <[email protected]> Reviewed-by: Bas Nieuwenhuizen <[email protected]>
* radv: store GFX9 GS state as part of the shader infoSamuel Pitoiset2019-09-102-31/+33
| | | | | Signed-off-by: Samuel Pitoiset <[email protected]> Reviewed-by: Bas Nieuwenhuizen <[email protected]>
* radv: fill shader info for all stages in the pipelineSamuel Pitoiset2019-09-104-20/+130
| | | | | | | | | This shouldn't be in NIR->LLVM because ACO also needs the shader info. This will also help for computing some NGG values that are necessary for declaring LDS symbols. Signed-off-by: Samuel Pitoiset <[email protected]> Reviewed-by: Bas Nieuwenhuizen <[email protected]>
* radv: do not pass all compiler options to the shader info passSamuel Pitoiset2019-09-103-28/+33
| | | | | | | Only the pipeline layout and the shader keys are needed. Signed-off-by: Samuel Pitoiset <[email protected]> Reviewed-by: Bas Nieuwenhuizen <[email protected]>
* radeonsi: remove redundant si_texture offset and size fieldsMarek Olšák2019-09-097-123/+106
| | | | Acked-by: Pierre-Eric Pelloux-Prayer <[email protected]>
* radeonsi: move texture storage allocation outside of radeonsiMarek Olšák2019-09-094-51/+97
| | | | | | possible code sharing with radv Acked-by: Pierre-Eric Pelloux-Prayer <[email protected]>
* radeonsi: move HTILE allocation outside of radeonsiMarek Olšák2019-09-094-91/+93
| | | | | | | ac_surface computes it for amdgpu. radeon_drm_surface computes it for radeon. Acked-by: Pierre-Eric Pelloux-Prayer <[email protected]>
* radeonsi: handle NO_DCC earlyMarek Olšák2019-09-091-5/+7
| | | | Acked-by: Pierre-Eric Pelloux-Prayer <[email protected]>
* ac/surface: add RADEON_SURF_NO_FMASKMarek Olšák2019-09-094-12/+14
| | | | | | This controls FMASK and CMASK computation for MSAA. Acked-by: Pierre-Eric Pelloux-Prayer <[email protected]>
* r300,r600,radeonsi: set winsys_handle::stride,offset in drivers, not winsysesMarek Olšák2019-09-096-20/+12
| | | | Acked-by: Pierre-Eric Pelloux-Prayer <[email protected]>
* r300,r600,radeonsi: read winsys_handle::stride,offset in drivers, not winsysesMarek Olšák2019-09-096-47/+20
| | | | Acked-by: Pierre-Eric Pelloux-Prayer <[email protected]>
* radeonsi/gfx10: fix wave occupancy computationsMarek Olšák2019-09-094-21/+49
| | | | | Cc: 19.2 <[email protected]> Reviewed-by: Pierre-Eric Pelloux-Prayer <[email protected]>
* radeonsi: only support at most 1024 threads per blockMarek Olšák2019-09-091-8/+2
| | | | | | LLVM 10 won't support 2048. Reviewed-by: Pierre-Eric Pelloux-Prayer <[email protected]>
* radeonsi: disable DCC when importing a texture from an incompatible driverMarek Olšák2019-09-091-4/+12
| | | | | | and unify the code. Reviewed-by: Pierre-Eric Pelloux-Prayer <[email protected]>
* radeonsi/gfx10: don't call gfx10_destroy_query with compute-only contextsMarek Olšák2019-09-091-1/+1
| | | | | | | This fixes a crash. Cc: 19.2 <[email protected]> Reviewed-by: Pierre-Eric Pelloux-Prayer <[email protected]>
* radeonsi/gfx10: use fma for TGSI_OPCODE_FMAMarek Olšák2019-09-093-5/+16
| | | | Acked-by: Pierre-Eric Pelloux-Prayer <[email protected]>
* ac: use fma on gfx10Marek Olšák2019-09-092-1/+9
| | | | Acked-by: Pierre-Eric Pelloux-Prayer <[email protected]>
* ac: enable LLVM atomic optimizationsMarek Olšák2019-09-091-1/+9
|
* virgl: Fix pipe_resource leaks under multi-sample.Lepton Wu2019-09-101-1/+3
| | | | | | | Fixes: 900a80f9e4f ("virgl: virgl_transfer should own its virgl_resource") Signed-off-by: Lepton Wu <[email protected]> Reviewed-by: Chia-I Wu <[email protected]>
* iris: Avoid flushing for cache history on transfer range flushesKenneth Graunke2019-09-092-2/+13
| | | | | | | | | | | | | | | | | The VBO module maps a buffer with GL_MAP_FLUSH_EXPLICIT, and keeps appending data, and calling glFlushMappedBufferRange(). We were invalidating the VF cache each time it flushed a new range, which results in a ton of VF flushes. If the contents of the destination in the target range are undefined (never even possibly written), this patch makes us assume that it's likely not in the cache and so cache invalidations are required. If the destination range is defined, we continue cache flushing as we may need to expunge stale data. This eliminates 88% of the VF cache invalidates on Manhattan 3.0. Improves performance in Manhattan 3.0 on my Icelake 8x8 with the GPU frequency locked to 700Mhz by 0.376724% +/- 0.0989183% (n=10).
* iris: Optimize out redundant sampler state bindsKenneth Graunke2019-09-091-2/+8
| | | | | | This cuts roughly 85% of the 3DSTATE_SAMPLER_STATE_POINTERS_PS calls in the J2DBench images test. For some reason, the state tracker is calling bind_sampler_state with the same sampler state in a bunch of cases.
* iris: Add support for the always_flush_cache=true debug option.Kenneth Graunke2019-09-097-0/+39
| | | | This can be useful for debugging missing flushes.
* mesa: Eliminate gl_config::rgbModeAdam Jackson2019-09-098-68/+31
| | | | | Reviewed-by: Eric Anholt <[email protected]> Reviewed-by: Marek Olšák <[email protected]>
* mesa: Eliminate gl_config::have{Accum,Depth,Stencil}BufferAdam Jackson2019-09-0913-46/+18
| | | | | Reviewed-by: Eric Anholt <[email protected]> Reviewed-by: Marek Olšák <[email protected]>
* mesa: Remove unused gl_config::indexBitsAdam Jackson2019-09-095-7/+1
| | | | | Reviewed-by: Eric Anholt <[email protected]> Reviewed-by: Marek Olšák <[email protected]>
* gallium/xlib: Fix an obvious thinkoAdam Jackson2019-09-091-1/+1
| | | | | x == !GLX_DIRECT_COLOR is a fancy way of writing x == 0, which is clearly not what was meant.
* iris: Ignore line stipple information if it's disabledKenneth Graunke2019-09-091-3/+5
| | | | | | | | | | | | | | | The line stipple pattern and factor only matter if line stippling is actually enabled. Otherwise, we can safely ignore it. PBO upload may give us zero for line stipple information, while normal drawing tends to give us an actual stipple pattern such as 0xffff. This was causing us to flag IRIS_DIRTY_LINE_STIPPLE way too often, leading to useless 3DSTATE_LINE_STIPPLE commands, which are non-pipelined and thus very expensive. Improves performance in Manhattan 3.0 on Skylake GT4e by 0.149261% +/- 0.0380796% (n=210). On an Icelake 8x8 with the GPU frequency locked at 700Mhz, improves by 0.423756% +/- 0.222843% (n=3).