diff --git a/src/imagination/vulkan/pvr_device.c b/src/imagination/vulkan/pvr_device.c index b561bd994e4..f5145361c3c 100644 --- a/src/imagination/vulkan/pvr_device.c +++ b/src/imagination/vulkan/pvr_device.c @@ -1256,6 +1256,20 @@ err_free_nop_usc_bo: return result; } +static void pvr_device_init_default_sampler_state(struct pvr_device *device) +{ + pvr_csb_pack (&device->input_attachment_sampler, TEXSTATE_SAMPLER, sampler) { + sampler.addrmode_u = PVRX(TEXSTATE_ADDRMODE_CLAMP_TO_EDGE); + sampler.addrmode_v = PVRX(TEXSTATE_ADDRMODE_CLAMP_TO_EDGE); + sampler.addrmode_w = PVRX(TEXSTATE_ADDRMODE_CLAMP_TO_EDGE); + sampler.dadjust = PVRX(TEXSTATE_DADJUST_ZERO_UINT); + sampler.magfilter = PVRX(TEXSTATE_FILTER_POINT); + sampler.minfilter = PVRX(TEXSTATE_FILTER_POINT); + sampler.anisoctl = PVRX(TEXSTATE_ANISOCTL_DISABLED); + sampler.non_normalized_coords = true; + } +} + VkResult pvr_CreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, @@ -1344,6 +1358,8 @@ VkResult pvr_CreateDevice(VkPhysicalDevice physicalDevice, if (result != VK_SUCCESS) goto err_pvr_free_compute_fence; + pvr_device_init_default_sampler_state(device); + if (pCreateInfo->pEnabledFeatures) memcpy(&device->features, pCreateInfo->pEnabledFeatures, diff --git a/src/imagination/vulkan/pvr_private.h b/src/imagination/vulkan/pvr_private.h index 401fadb222b..1a1cecffb4b 100644 --- a/src/imagination/vulkan/pvr_private.h +++ b/src/imagination/vulkan/pvr_private.h @@ -270,6 +270,8 @@ struct pvr_device { uint32_t pixel_event_data_size_in_dwords; + uint64_t input_attachment_sampler; + struct pvr_pds_upload pds_compute_fence_program; struct {