diff --git a/src/intel/vulkan_hasvk/anv_device.c b/src/intel/vulkan_hasvk/anv_device.c index 599ca7d..df945fc 100644 --- a/src/intel/vulkan_hasvk/anv_device.c +++ b/src/intel/vulkan_hasvk/anv_device.c @@ -439,17 +439,30 @@ get_features(const struct anv_physical_device *pdevice, .shaderStorageImageArrayDynamicIndexing = true, .shaderClipDistance = true, .shaderCullDistance = true, - .shaderFloat64 = pdevice->info.ver >= 8 && - pdevice->info.has_64bit_float, - .shaderInt64 = pdevice->info.ver >= 8, - .shaderInt16 = pdevice->info.ver >= 8, + /* DENEY: bu ucu anv'den ver >= 8 sartiyla miras alinmisti. Gen7'de + * has_64bit_float zaten true ve crocus ayni donanimda + * GL_ARB_gpu_shader_fp64 sunuyor, yani elk fp64 kodu uretebiliyor. + * int64/int16 icin donanim destegi yok ama elk_compiler.c:62 civarinda + * eksik olani nir_lower_*64/16 ile yazilima indirgiyor. CTS ile + * dogrulanacak; gerilerse geri alinir. */ + .shaderFloat64 = pdevice->info.has_64bit_float, + .shaderInt64 = true, + .shaderInt16 = true, .shaderResourceMinLod = false, .variableMultisampleRate = true, .inheritedQueries = true, /* Vulkan 1.1 */ - .storageBuffer16BitAccess = pdevice->info.ver >= 8 && !pdevice->instance->no_16bit, - .uniformAndStorageBuffer16BitAccess = pdevice->info.ver >= 8 && !pdevice->instance->no_16bit, + /* DENEY: gen7'de de aciliyor. 16-bit bellek erisimi icin gereken + * indirgeme zaten kurulu -- elk_nir.c:get_mem_access_size_align() + * verx10 < 75 icin her sub-dword erisimi 32-bit dword'e cevirip + * load'da shift+extract, store'da atomic RMW uretiyor. 16-bit tamsayi + * ALU'su gen7'de native (gfx7_hw_type[] W/UW), fp16 ALU'su ise + * lower_bit_size_callback tarafindan 32-bit'e indirgeniyor ve + * f16to32/f32to16 donusum komutlari IVB'de mevcut. + * CTS ile dogrulanacak; gerilerse geri alinir. */ + .storageBuffer16BitAccess = !pdevice->instance->no_16bit, + .uniformAndStorageBuffer16BitAccess = !pdevice->instance->no_16bit, .storagePushConstant16 = pdevice->info.ver >= 8, .storageInputOutput16 = false, .multiview = true, @@ -882,6 +895,14 @@ get_properties_1_2(const struct anv_physical_device *pdevice, p->shaderRoundingModeRTZFloat32 = true; p->shaderSignedZeroInfNanPreserveFloat32 = true; + /* Gen7 DF float-controls'u donanimda destekliyor: IVB PRM vol4 part3, + * CR0 bit 6 "Double Precision Denorm Mode" ve bit 5:4 "Rounding Mode". + * Eksik olan derleyici tarafiydi -- vec4 arka ucu (VS/GS/TCS/TES) yalnizca + * RND_MODE emit ediyor, denorm modunu hic yazmiyordu. Bu artik + * vec4_visitor::emit_shader_float_controls_execution_mode() icinde + * FLOAT_CONTROL_MODE ile duzeltildi, dolayisiyla bu dordu gen7'de de + * dogru sekilde vaat edilebiliyor. + */ p->shaderDenormFlushToZeroFloat64 = true; p->shaderDenormPreserveFloat64 = true; p->shaderRoundingModeRTEFloat64 = true;