Thread: VirtualDub2
View Single Post
Old 10th March 2017, 09:55   #213  |  Link
jpsdr
Registered User
 
Join Date: Oct 2002
Location: France
Posts: 2,308
Would it be possible, to have in the next release (no hurry, take your time), the two following things :

First, change the default value alignment (and so also the modulo pitch value) from 16 to 64.
And also, change this :
Code:
	/// Filter requests 16 byte alignment for source and destination buffers. This guarantees that:
	///
	///		- data and pitch fields are multiples of 16 bytes (aligned)
	///		- an integral number of 16 byte vectors may be read, even if the last vector includes
	///		  some bytes beyond the end of the scanline (their values are undefined)
	///		- an integral number of 16 byte vectors may be written, even if the last vector includes
	///		  some bytes beyong the end of the scanline (their values are ignored)
	///
	FILTERPARAM_ALIGN_SCANLINES		= 0x00000008L,
to this :
Code:
	/// Filter requests 64 byte alignment for source and destination buffers. This guarantees that:
	///
	///		- data and pitch fields are multiples of 64 bytes (aligned)
	///		- an integral number of 64 byte vectors may be read, even if the last vector includes
	///		  some bytes beyond the end of the scanline (their values are undefined)
	///		- an integral number of 64 byte vectors may be written, even if the last vector includes
	///		  some bytes beyong the end of the scanline (their values are ignored)
	///
	FILTERPARAM_ALIGN_SCANLINES		= 0x00000008L,
As the "why 64" ? Just to see for the future, and don't have to touch it again for a long time.

The second change, would be to add CPU mode.
The first step would just be to add these :
Code:
  // AVS+
  CPUF_AVX2         = 0x2000,   //  Haswell
  CPUF_FMA3         = 0x4000,
  CPUF_F16C         = 0x8000,
  CPUF_MOVBE        = 0x10000,  // Big Endian move
  CPUF_POPCNT       = 0x20000,
  CPUF_AES          = 0x40000,
  CPUF_FMA4         = 0x80000,
  
  CPUF_AVX512F      = 0x100000,  // AVX-512 Foundation.
  CPUF_AVX512DQ     = 0x200000,  // AVX-512 DQ (Double/Quad granular) Instructions
  CPUF_AVX512PF     = 0x400000,  // AVX-512 Prefetch
  CPUF_AVX512ER     = 0x800000,  // AVX-512 Exponential and Reciprocal
  CPUF_AVX512CD     = 0x1000000, // AVX-512 Conflict Detection
  CPUF_AVX512BW     = 0x2000000, // AVX-512 BW (Byte/Word granular) Instructions
  CPUF_AVX512VL     = 0x4000000, // AVX-512 VL (128/256 Vector Length) Extensions
  CPUF_AVX512IFMA   = 0x8000000, // AVX-512 IFMA integer 52 bit
  CPUF_AVX512VBMI   = 0x10000000,// AVX-512 VBMI
to made them avaible for plugin.
I don't know how it's made within VDub, my humble suggestion would be to take a look at the avs+ cpuid.cpp code, it's now "very easy"...
The second step, could be done later in a second time, would be to add these in the "Option->Preference->CPU" menu.

I think these improvements could be very usefull in your spirit of upgrade or continue to make live VirtualDub.
jpsdr is offline   Reply With Quote