summaryrefslogtreecommitdiffstats
path: root/src/intel
Commit message (Collapse)AuthorAgeFilesLines
* anv/pipeline: lower constant initializers on output variables earlierIago Toral Quiroga2018-01-301-0/+5
| | | | | | | | | | | | | If a shader only writes to an output via a constant initializer we need to lower it before we call nir_remove_dead_variables so that this pass sees the stores from the initializer and doesn't kill the output. Fixes test failures in new work-in-progress CTS tests: dEQP-VK.spirv_assembly.instruction.graphics.variable_init.output_vert dEQP-VK.spirv_assembly.instruction.graphics.variable_init.output_frag Reviewed-by: Jason Ekstrand <[email protected]>
* anv/cmd_buffer: Emit PIPE_CONTROL with ISP bit on older platforms.Rafael Antognolli2018-01-291-4/+2
| | | | | | | Emit it on all platforms since gen7. Signed-off-by: Rafael Antognolli <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
* nir: add vs_inputs_dual_locations compiler optionTimothy Arceri2018-01-301-0/+3
| | | | | | | | | | | | | Allows nir drivers to either use a single or dual locations for vs double inputs. i965 uses dual locations for both OpenGL and Vulkan drivers, for now gallium OpenGL drivers only use a single location. The following patch will also make use of this option when calling nir_shader_gather_info(). Reviewed-by: Karol Herbst <[email protected]>
* compiler: tidy up double_inputs_read usesTimothy Arceri2018-01-301-1/+1
| | | | | | | | | | | | | First we move double_inputs_read into a vs struct in the union, double_inputs_read is only used for vs inputs so this will save space and also allows us to add a new double_inputs field. We add the new field because c2acf97fcc9b changed the behaviour of double_inputs_read, and while it's no longer used to track actual reads in i965 we do still want to track this for gallium drivers. Reviewed-by: Marek Olšák <[email protected]>
* anv/gen10: Emit CS stall and mark push constants dirty.Rafael Antognolli2018-01-262-7/+12
| | | | | | | | | | | I got reviews and fixed the patches locally, but ended up merging the ones that I sent originally to the list. This patch fixes those mistakes. Fixes: 78c125af3904c539ea69bec2dd9fdf7a5162854f Signed-off-by: Rafael Antognolli <[email protected]> Cc: Jason Ekstrand <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
* i965/gen10: Re-enable push constants.Rafael Antognolli2018-01-261-9/+0
| | | | | | | | | | The GPU hang caused by push constants is apparently fixed, so let's enable them again. Signed-off-by: Rafael Antognolli <[email protected]> Cc: "18.0" <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
* anv/gen10: Ignore push constant packets during context restore.Rafael Antognolli2018-01-262-0/+48
| | | | | | | | | | | Similar to the GL driver, ignore 3DSTATE_CONSTANT_* packets when doing a context restore. Signed-off-by: Rafael Antognolli <[email protected]> Cc: Jason Ekstrand <[email protected]> Cc: "18.0" <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
* anv/pipeline: remove the pipeline layout field from anv_pipelineIago Toral Quiroga2018-01-263-4/+0
| | | | | | | It no longer has any users. Suggested-by: Jason Ekstrand <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
* anv/cmd_buffer: add the pipeline layout to the pipeline stateIago Toral Quiroga2018-01-263-5/+12
| | | | | | | | | | We need to access the pipeline layout to compute correct dynamic offsets for dyamic UBO/SSBO descriptors when we emit draw commands. Instead of taking it from the pipeline object, store the layout in the command buffer pipeline state. Suggested-by: Jason Ekstrand <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
* anv/pipeline: don't take the layout from the pipeline to compile shadersIago Toral Quiroga2018-01-264-25/+39
| | | | | | | | | | | | | | | | | | | | | | | | | | | The Vulkan spec states that VkPipelineLayout objects must not be destroyed while any command buffer that uses them is in the recording state, but it permits them to be destroyed otherwise. This means that applications are allowed to free pipeline layouts after command recording is finished even if there are pipeline objects that still exist and were created with these layouts. There are two solutions to this, one is to use reference counting on pipeline layout objects. The other is to avoid holding references to pipeline layouts where they are not really needed. This patch takes a step towards the second option by making the pipeline shader compile code take pipeline layout from the VkGraphicsPipelineCreateInfo provided rather than the pipeline object. A follow-up patch will remove any remaining uses of the layout field so we can remove it from the pipeline object and avoid the need for reference counting. v2: Use ANV_FROM_HANDLE, remove unnecessary braces (Jason) Suggested-by: Jason Ekstrand <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
* anv/descriptor_set: add reference counting for descriptor set layoutsIago Toral Quiroga2018-01-263-11/+41
| | | | | | | | | | | | | | | | | | | | | The spec states that descriptor set layouts can be destroyed almost at any time: "VkDescriptorSetLayout objects may be accessed by commands that operate on descriptor sets allocated using that layout, and those descriptor sets must not be updated with vkUpdateDescriptorSets after the descriptor set layout has been destroyed. Otherwise, descriptor set layouts can be destroyed any time they are not in use by an API command." v2: allocate off the device allocator with DEVICE scope (Jason) Fixes the following work-in-progress CTS tests: dEQP-VK.api.descriptor_set.descriptor_set_layout_lifetime.graphics dEQP-VK.api.descriptor_set.descriptor_set_layout_lifetime.compute Suggested-by: Jason Ekstrand <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
* anv/pipeline: Don't look at blend state unless we have an attachmentJason Ekstrand2018-01-261-3/+3
| | | | | | | | | | | | Without this, we may end up dereferencing blend before we check for binding->index != UINT32_MAX. However, Vulkan allows the blend state to be NULL so long as you don't have any color attachments. This fixes a segfault when running The Talos Principal. Fixes: 12f4e00b69e724a23504b7bd3958fb75dc462950 Cc: [email protected] Reviewed-by: Alex Smith <[email protected]> Reviewed-by: Lionel Landwerlin <[email protected]>
* anv_icd.py: improve reproducible buildsMaxin B. John2018-01-261-1/+1
| | | | | | | | | | Sort the output to ensure build reproducibility Signed-off-by: Maxin B. John <[email protected]> Reviewed-by: Emil Velikov <[email protected]> Fixes: 0ab04ba979b ("anv: Use python to generate ICD json files") Reviewed-by: Dylan Baker <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
* i965/fs: Reset the register file to VGRF in lower_integer_multiplicationJason Ekstrand2018-01-251-5/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | 18fde36ced4279f2577097a1a7d31b55f2f5f141 changed the way temporary registers were allocated in lower_integer_multiplication so that we allocate regs_written(inst) space and keep the stride of the original destination register. This was to ensure that any MUL which originally followed the CHV/BXT integer multiply regioning restrictions would continue to follow those restrictions even after lowering. This works fine except that I forgot to reset the register file to VGRF so, even though they were assigned a number from alloc.allocate(), they had the wrong register file. This caused some GLES 3.0 CTS tests to start failing on Sandy Bridge due to attempted reads from the MRF: ES3-CTS.functional.shaders.precision.int.highp_mul_fragment.snbm64 ES3-CTS.functional.shaders.precision.int.mediump_mul_fragment.snbm64 ES3-CTS.functional.shaders.precision.int.lowp_mul_fragment.snbm64 ES3-CTS.functional.shaders.precision.uint.highp_mul_fragment.snbm64 ES3-CTS.functional.shaders.precision.uint.mediump_mul_fragment.snbm64 ES3-CTS.functional.shaders.precision.uint.lowp_mul_fragment.snbm64 This commit remedies this problem by, instead of copying inst->dst and overwriting nr, just make a new register and set the region to match inst->dst. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=103626 Fixes: 18fde36ced4279f2577097a1a7d31b55f2f5f141 Cc: "17.3" <[email protected]> Reviewed-by: Matt Turner <[email protected]>
* automake: anv: ship anv_extensions_gen.py in the tarballEmil Velikov2018-01-251-0/+1
| | | | | | Fixes: dd088d4bec7 ("anv/extensions: Generate a header file with extension tables") Signed-off-by: Emil Velikov <[email protected]>
* aubinator: Multiply count by 4 to compute buffer sizesJason Ekstrand2018-01-241-1/+1
| | | | The count field is in terms of dwords and not bytes.
* anv: correct a duplicate check in an assertGrazvydas Ignotas2018-01-251-1/+1
| | | | | | | | Looks like checking both sources was intended, instead of the first one twice. Found with Coccinelle, coccinellery/xand/xand.cocci semantic patch. Signed-off-by: Grazvydas Ignotas <[email protected]> Reviewed-by: Tapani Pälli <[email protected]>
* anv/cmd_buffer: Move gen7 index buffer state to graphics stateJason Ekstrand2018-01-232-13/+13
| | | | | | Tested-by: Józef Kucia <[email protected]> Reviewed-by: Topi Pohjolainen <[email protected]> Cc: "18.0" <[email protected]>
* anv/cmd_buffer: Move num_workgroups to compute stateJason Ekstrand2018-01-232-9/+12
| | | | | | | | While we're here, make it an anv_address. Tested-by: Józef Kucia <[email protected]> Reviewed-by: Topi Pohjolainen <[email protected]> Cc: "18.0" <[email protected]>
* anv/cmd_buffer: Move dynamic state to graphics stateJason Ekstrand2018-01-234-30/+33
| | | | | | Tested-by: Józef Kucia <[email protected]> Reviewed-by: Topi Pohjolainen <[email protected]> Cc: "18.0" <[email protected]>
* anv/cmd_buffer: Use a temporary variable for dynamic stateJason Ekstrand2018-01-232-27/+24
| | | | | | | | | We were already doing this for some packets to keep the lines shorter. We may as well just do it for all of them. Tested-by: Józef Kucia <[email protected]> Reviewed-by: Topi Pohjolainen <[email protected]> Cc: "18.0" <[email protected]>
* anv/cmd_buffer: Move vb_dirty bits into anv_cmd_graphics_stateJason Ekstrand2018-01-234-7/+7
| | | | | | | | Vertex buffers are entirely a graphics pipeline thing. Tested-by: Józef Kucia <[email protected]> Reviewed-by: Topi Pohjolainen <[email protected]> Cc: "18.0" <[email protected]>
* anv/cmd_buffer: Move dirty bits into anv_cmd_*_stateJason Ekstrand2018-01-237-60/+62
| | | | | | Tested-by: Józef Kucia <[email protected]> Reviewed-by: Topi Pohjolainen <[email protected]> Cc: "18.0" <[email protected]>
* anv: Separate compute and graphics descriptor setsJason Ekstrand2018-01-234-32/+70
| | | | | | | | | | | | | | | | | | The Vulkan spec says: "pipelineBindPoint is a VkPipelineBindPoint indicating whether the descriptors will be used by graphics pipelines or compute pipelines. There is a separate set of bind points for each of graphics and compute, so binding one does not disturb the other." Up until now, we've been ignoring the pipeline bind point and had just one bind point for everything. This commit separates things out into separate bind points. Tested-by: Józef Kucia <[email protected]> Reviewed-by: Topi Pohjolainen <[email protected]> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102897 Cc: "18.0" <[email protected]>
* anv/cmd_buffer: Use anv_descriptor_for_binding for samplersJason Ekstrand2018-01-231-4/+2
| | | | | | Tested-by: Józef Kucia <[email protected]> Reviewed-by: Topi Pohjolainen <[email protected]> Cc: "18.0" <[email protected]>
* anv/cmd_buffer: Add a helper for binding descriptor setsJason Ekstrand2018-01-231-28/+42
| | | | | | | | | This lets us unify some code between push descriptors and regular descriptors. It doesn't do much for us yet but it will. Tested-by: Józef Kucia <[email protected]> Reviewed-by: Topi Pohjolainen <[email protected]> Cc: "18.0" <[email protected]>
* anv/cmd_buffer: Refactor ensure_push_descriptor_setJason Ekstrand2018-01-231-11/+13
| | | | | | | | | | | It's now a function which returns the push descriptor set. Since we set the error on the command buffer, returning the error is a little redundant. Returning the descriptor set (or NULL on error) is more convenient. Tested-by: Józef Kucia <[email protected]> Reviewed-by: Topi Pohjolainen <[email protected]> Cc: "18.0" <[email protected]>
* anv: Remove semicolons from vk_error[f] definitionsJason Ekstrand2018-01-231-2/+2
| | | | | | | | | With the semicolons, they can't be used in a function argument without throwing syntax errors. Tested-by: Józef Kucia <[email protected]> Reviewed-by: Topi Pohjolainen <[email protected]> Cc: "18.0" <[email protected]>
* anv/cmd_buffer: Add substructs to anv_cmd_state for graphics and computeJason Ekstrand2018-01-235-32/+74
| | | | | | | | Initially, these just contain the pipeline in a base struct. Tested-by: Józef Kucia <[email protected]> Reviewed-by: Topi Pohjolainen <[email protected]> Cc: "18.0" <[email protected]>
* anv/cmd_buffer: Use some pre-existing pipeline temporariesJason Ekstrand2018-01-232-7/+5
| | | | | | | | | | There are several places where we'd already saved the pipeline off to a temporary variable but, due to an artifact of history, weren't actually using that temporary everywhere. No functional change. Tested-by: Józef Kucia <[email protected]> Reviewed-by: Topi Pohjolainen <[email protected]> Cc: "18.0" <[email protected]>
* anv/cmd_buffer: Rework anv_cmd_state_resetJason Ekstrand2018-01-231-38/+22
| | | | | | | | | | | This splits anv_cmd_state_reset into separate init and finish functions. This lets us share init code with cmd_buffer_create. This potentially fixes subtle bugs where we may have missed some bit of state that needs to get initialized on command buffer creation. Tested-by: Józef Kucia <[email protected]> Reviewed-by: Topi Pohjolainen <[email protected]> Cc: "18.0" <[email protected]>
* anv/cmd_buffer: Get rid of the meta query workaroundJason Ekstrand2018-01-233-16/+0
| | | | | | | | Meta has been gone for a long time. Tested-by: Józef Kucia <[email protected]> Reviewed-by: Topi Pohjolainen <[email protected]> Cc: "18.0" <[email protected]>
* anv/cmd_state: Drop the scratch_size fieldJason Ekstrand2018-01-231-1/+0
| | | | | | | | | This is a legacy left-over from the mechanism we used to use to handle scratch. The new (and better) mechanism doesn't use this. Tested-by: Józef Kucia <[email protected]> Reviewed-by: Topi Pohjolainen <[email protected]> Cc: "18.0" <[email protected]>
* anv/pipeline: Don't assert on more than 32 samplersJason Ekstrand2018-01-231-1/+7
| | | | | | | | This prevents an assert when running one unreleased Vulkan game. Tested-by: Józef Kucia <[email protected]> Reviewed-by: Topi Pohjolainen <[email protected]> Cc: "18.0" <[email protected]>
* anv: Return trampoline entrypoints from GetInstanceProcAddrJason Ekstrand2018-01-232-1/+50
| | | | | | | | | | | | | | | | | | | | Technically, the Vulkan spec requires that we return valid entrypoints for all core functionality and any available device extensions. This means that, for gen-specific functions, we need to return a trampoline which looks at the device and calls the right device function. In 99% of cases, the loader will do this for us but, aparently, we're supposed to do it too. It's a tiny increase in binary size for us to carry this around but really not bad. Before: text data bss dec hex filename 3541775 204112 6136 3752023 394057 libvulkan_intel.so After: text data bss dec hex filename 3551463 205632 6136 3763231 396c1f libvulkan_intel.so Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]>
* anv/entrypoints: Use an named tuple for paramsJason Ekstrand2018-01-231-11/+23
| | | | | | This allows us to store a bit more detailed data per-param Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]>
* anv: Only advertise enabled entrypointsJason Ekstrand2018-01-233-6/+74
| | | | | | | | | The Vulkan spec annoyingly requires us to track what core version and what all extensions are enabled and only advertise those entrypoints. Any call to vkGet*ProcAddr for an entrypoint for an extension the client has not explicitly enabled is supposed to return NULL. Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]>
* anv: Add a per-device dispatch tableJason Ekstrand2018-01-232-1/+44
| | | | | | We also switch GetDeviceProcAddr over to use it. Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]>
* anv: Add a per-instance dispatch tableJason Ekstrand2018-01-232-1/+7
| | | | | | We also switch GetInstanceProcAddr over to use it. Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]>
* anv: Properly NULL for GetInstanceProcAddr with a null instanceJason Ekstrand2018-01-231-1/+23
| | | | Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]>
* anv/extensions: Fix VkVersion::c_vk_version for patch == NoneJason Ekstrand2018-01-231-1/+2
| | | | Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]>
* anv/entrypoints: Parse entrypoints before extensions/featuresJason Ekstrand2018-01-231-15/+17
| | | | Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]>
* anv/entrypoints: Expose the different dispatch tablesJason Ekstrand2018-01-231-8/+12
| | | | Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]>
* anv/entrypoints: Split entrypoint index lookup into its own functionJason Ekstrand2018-01-232-5/+16
| | | | Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]>
* anv/entrypoints: Add a LAYERS helper variableJason Ekstrand2018-01-231-7/+15
| | | | Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]>
* anv/entrypoints: Add an Entrypoint classJason Ekstrand2018-01-231-50/+63
| | | | | Reviewed-by: Lionel Landwerlin <[email protected]> Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]>
* anv: Add a per-device table of enabled extensionsJason Ekstrand2018-01-232-0/+5
| | | | | | Nothing uses this at the moment, but we will need it soon. Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]>
* anv: Use tables for device extension wranglingJason Ekstrand2018-01-233-32/+49
| | | | Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]>
* anv: Add a per-instance table of enabled extensionsJason Ekstrand2018-01-232-0/+6
| | | | | | Nothing needs this yet but we will want it later. Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]>
* anv: Use tables for instance extension wranglingJason Ekstrand2018-01-233-31/+34
| | | | | | | This lets us move a bunch of stuff out of codegen and back into anv_device.c which is a bit nicer. Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]>