swr: [rasterizer core] Multisample sample position setup change

Reviewed-by: Bruce Cherniak <bruce.cherniak@intel.com>
This commit is contained in:
Tim Rowley 2017-03-31 20:33:43 -05:00
parent 4c093869db
commit 0033e86b2c
3 changed files with 92 additions and 75 deletions

View File

@ -38,14 +38,24 @@ def main(args=sys.argv[1:]):
parser.add_argument('--cpp', help="Generate cpp file(s)", action='store_true', default=False)
parser.add_argument('--cmake', help="Generate cmake file", action='store_true', default=False)
args = parser.parse_args(args);
class backendStrs :
def __init__(self) :
self.outFileName = 'gen_BackendPixelRate%s.cpp'
self.functionTableName = 'gBackendPixelRateTable'
self.funcInstanceHeader = ' = BackendPixelRate<SwrBackendTraits<'
self.template = 'gen_backend.cpp'
self.cmakeFileName = 'gen_backends.cmake'
self.cmakeSrcVar = 'GEN_BACKEND_SOURCES'
backend = backendStrs()
output_list = []
for x in args.dim:
output_list.append(list(range(x)))
# generate all permutations possible for template paremeter inputs
# generate all permutations possible for template parameter inputs
output_combinations = list(itertools.product(*output_list))
output_list = []
@ -53,12 +63,12 @@ def main(args=sys.argv[1:]):
for x in range(len(output_combinations)):
# separate each template peram into its own list member
new_list = [output_combinations[x][i] for i in range(len(output_combinations[x]))]
tempStr = 'gBackendPixelRateTable'
tempStr = backend.functionTableName
#print each list member as an index in the multidimensional array
for i in new_list:
tempStr += '[' + str(i) + ']'
#map each entry in the permuation as its own string member, store as the template instantiation string
tempStr += " = BackendPixelRate<SwrBackendTraits<" + ','.join(map(str, output_combinations[x])) + '>>;'
tempStr += backend.funcInstanceHeader + ','.join(map(str, output_combinations[x])) + '>>;'
#append the line of c++ code in the list of output lines
output_list.append(tempStr)
@ -72,8 +82,8 @@ def main(args=sys.argv[1:]):
# generate .cpp files
if args.cpp:
baseCppName = os.path.join(args.outdir, 'gen_BackendPixelRate%s.cpp')
templateCpp = os.path.join(thisDir, 'templates', 'gen_backend.cpp')
baseCppName = os.path.join(args.outdir, backend.outFileName)
templateCpp = os.path.join(thisDir, 'templates', backend.template)
for fileNum in range(numFiles):
filename = baseCppName % str(fileNum)
@ -88,12 +98,13 @@ def main(args=sys.argv[1:]):
# generate gen_backend.cmake file
if args.cmake:
templateCmake = os.path.join(thisDir, 'templates', 'gen_backend.cmake')
cmakeFile = os.path.join(args.outdir, 'gen_backends.cmake')
cmakeFile = os.path.join(args.outdir, backend.cmakeFileName)
#print('Generating', cmakeFile)
MakoTemplateWriter.to_file(
templateCmake,
cmakeFile,
cmdline=sys.argv,
srcVar=backend.cmakeSrcVar,
numFiles=numFiles,
baseCppName='${RASTY_GEN_SRC_DIR}/backends/' + os.path.basename(baseCppName))

View File

@ -25,28 +25,24 @@
******************************************************************************/
#include "multisample.h"
const uint32_t MultisampleTraits<SWR_MULTISAMPLE_1X>::samplePosXi {0x80};
const uint32_t MultisampleTraits<SWR_MULTISAMPLE_1X>::samplePosYi {0x80};
const uint32_t MultisampleTraits<SWR_MULTISAMPLE_2X>::samplePosXi[2] {0xC0, 0x40};
const uint32_t MultisampleTraits<SWR_MULTISAMPLE_2X>::samplePosYi[2] {0xC0, 0x40};
const uint32_t MultisampleTraits<SWR_MULTISAMPLE_4X>::samplePosXi[4] {0x60, 0xE0, 0x20, 0xA0};
const uint32_t MultisampleTraits<SWR_MULTISAMPLE_4X>::samplePosYi[4] {0x20, 0x60, 0xA0, 0xE0};
const uint32_t MultisampleTraits<SWR_MULTISAMPLE_8X>::samplePosXi[8] {0x90, 0x70, 0xD0, 0x50, 0x30, 0x10, 0xB0, 0xF0};
const uint32_t MultisampleTraits<SWR_MULTISAMPLE_8X>::samplePosYi[8] {0x50, 0xB0, 0x90, 0x30, 0xD0, 0x70, 0xF0, 0x10};
const uint32_t MultisampleTraits<SWR_MULTISAMPLE_16X>::samplePosXi[16]
{0x90, 0x70, 0x50, 0xC0, 0x30, 0xA0, 0xD0, 0xB0, 0x60, 0x80, 0x40, 0x20, 0x00, 0xF0, 0xE0, 0x10};
const uint32_t MultisampleTraits<SWR_MULTISAMPLE_16X>::samplePosYi[16]
{0x90, 0x50, 0xA0, 0x70, 0x60, 0xD0, 0xB0, 0x30, 0xE0, 0x10, 0x20, 0xC0, 0x80, 0x40, 0xF0, 0x00};
constexpr uint32_t MultisampleTraits<SWR_MULTISAMPLE_1X>::samplePosXi[1];
constexpr uint32_t MultisampleTraits<SWR_MULTISAMPLE_1X>::samplePosYi[1];
constexpr uint32_t MultisampleTraits<SWR_MULTISAMPLE_2X>::samplePosXi[2];
constexpr uint32_t MultisampleTraits<SWR_MULTISAMPLE_2X>::samplePosYi[2];
constexpr uint32_t MultisampleTraits<SWR_MULTISAMPLE_4X>::samplePosXi[4];
constexpr uint32_t MultisampleTraits<SWR_MULTISAMPLE_4X>::samplePosYi[4];
constexpr uint32_t MultisampleTraits<SWR_MULTISAMPLE_8X>::samplePosXi[8];
constexpr uint32_t MultisampleTraits<SWR_MULTISAMPLE_8X>::samplePosYi[8];
constexpr uint32_t MultisampleTraits<SWR_MULTISAMPLE_16X>::samplePosXi[16];
constexpr uint32_t MultisampleTraits<SWR_MULTISAMPLE_16X>::samplePosYi[16];
const float MultisampleTraits<SWR_MULTISAMPLE_1X>::samplePosX{0.5f};
const float MultisampleTraits<SWR_MULTISAMPLE_1X>::samplePosY{0.5f};
const float MultisampleTraits<SWR_MULTISAMPLE_2X>::samplePosX[2]{0.75f, 0.25f};
const float MultisampleTraits<SWR_MULTISAMPLE_2X>::samplePosY[2]{0.75f, 0.25f};
const float MultisampleTraits<SWR_MULTISAMPLE_4X>::samplePosX[4]{0.375f, 0.875, 0.125, 0.625};
const float MultisampleTraits<SWR_MULTISAMPLE_4X>::samplePosY[4]{0.125, 0.375, 0.625, 0.875};
const float MultisampleTraits<SWR_MULTISAMPLE_8X>::samplePosX[8]{0.5625, 0.4375, 0.8125, 0.3125, 0.1875, 0.0625, 0.6875, 0.9375};
const float MultisampleTraits<SWR_MULTISAMPLE_8X>::samplePosY[8]{0.3125, 0.6875, 0.5625, 0.1875, 0.8125, 0.4375, 0.9375, 0.0625};
const float MultisampleTraits<SWR_MULTISAMPLE_16X>::samplePosX[16]
{0.5625, 0.4375, 0.3125, 0.7500, 0.1875, 0.6250, 0.8125, 0.6875, 0.3750, 0.5000, 0.2500, 0.1250, 0.0000, 0.9375, 0.8750, 0.0625};
const float MultisampleTraits<SWR_MULTISAMPLE_16X>::samplePosY[16]
{0.5625, 0.3125, 0.6250, 0.4375, 0.3750, 0.8125, 0.6875, 0.1875, 0.8750, 0.0625, 0.1250, 0.7500, 0.5000, 0.2500, 0.9375, 0.0000};
constexpr float MultisampleTraits<SWR_MULTISAMPLE_1X>::samplePosX[1];
constexpr float MultisampleTraits<SWR_MULTISAMPLE_1X>::samplePosY[1];
constexpr float MultisampleTraits<SWR_MULTISAMPLE_2X>::samplePosX[2];
constexpr float MultisampleTraits<SWR_MULTISAMPLE_2X>::samplePosY[2];
constexpr float MultisampleTraits<SWR_MULTISAMPLE_4X>::samplePosX[4];
constexpr float MultisampleTraits<SWR_MULTISAMPLE_4X>::samplePosY[4];
constexpr float MultisampleTraits<SWR_MULTISAMPLE_8X>::samplePosX[8];
constexpr float MultisampleTraits<SWR_MULTISAMPLE_8X>::samplePosY[8];
constexpr float MultisampleTraits<SWR_MULTISAMPLE_16X>::samplePosX[16];
constexpr float MultisampleTraits<SWR_MULTISAMPLE_16X>::samplePosY[16];

View File

@ -71,17 +71,17 @@ struct MultisampleTraits
template<>
struct MultisampleTraits<SWR_MULTISAMPLE_1X, false>
{
INLINE static float X(uint32_t sampleNum) {return samplePosX;};
INLINE static float Y(uint32_t sampleNum) {return samplePosY;};
INLINE static float X(uint32_t sampleNum) {return samplePosX[sampleNum];};
INLINE static float Y(uint32_t sampleNum) {return samplePosY[sampleNum];};
INLINE static simdscalari FullSampleMask(){return _simd_set1_epi32(0x1);};
static const uint32_t samplePosXi;
static const uint32_t samplePosYi;
static const float samplePosX;
static const float samplePosY;
static const uint32_t numSamples = 1;
static const uint32_t numCoverageSamples = 1;
static const SWR_MULTISAMPLE_COUNT sampleCount = SWR_MULTISAMPLE_1X;
static const uint32_t numCoverageSamples = 1;
static constexpr uint32_t samplePosXi[1] = { 0x80 };
static constexpr uint32_t samplePosYi[1] = { 0x80 };
static constexpr float samplePosX[1] = { 0.5f };
static constexpr float samplePosY[1] = { 0.5f };
};
template<>
@ -92,10 +92,12 @@ struct MultisampleTraits<SWR_MULTISAMPLE_1X, true>
INLINE static simdscalari FullSampleMask(){return _simd_set1_epi32(0x1);};
static const uint32_t numSamples = 1;
static const float samplePosX;
static const float samplePosY;
static const SWR_MULTISAMPLE_COUNT sampleCount = SWR_MULTISAMPLE_1X;
static const uint32_t numCoverageSamples = 1;
static const SWR_MULTISAMPLE_COUNT sampleCount = SWR_MULTISAMPLE_1X;
static constexpr uint32_t samplePosXi[1] = { 0x80 };
static constexpr uint32_t samplePosYi[1] = { 0x80 };
static constexpr float samplePosX[1] = { 0.5f };
static constexpr float samplePosY[1] = { 0.5f };
};
template<>
@ -109,13 +111,13 @@ struct MultisampleTraits<SWR_MULTISAMPLE_2X, false>
return mask;
}
static const uint32_t samplePosXi[2];
static const uint32_t samplePosYi[2];
static const float samplePosX[2];
static const float samplePosY[2];
static const uint32_t numSamples = 2;
static const SWR_MULTISAMPLE_COUNT sampleCount = SWR_MULTISAMPLE_2X;
static const uint32_t numCoverageSamples = 2;
static const SWR_MULTISAMPLE_COUNT sampleCount = SWR_MULTISAMPLE_2X;
static constexpr uint32_t samplePosXi[2] = { 0xC0, 0x40 };
static constexpr uint32_t samplePosYi[2] = { 0xC0, 0x40 };
static constexpr float samplePosX[2] = {0.75f, 0.25f};
static constexpr float samplePosY[2] = {0.75f, 0.25f};
};
template<>
@ -129,10 +131,12 @@ struct MultisampleTraits<SWR_MULTISAMPLE_2X, true>
return mask;
}
static const uint32_t numSamples = 2;
static const float samplePosX[2];
static const float samplePosY[2];
static const SWR_MULTISAMPLE_COUNT sampleCount = SWR_MULTISAMPLE_2X;
static const uint32_t numCoverageSamples = 1;
static const SWR_MULTISAMPLE_COUNT sampleCount = SWR_MULTISAMPLE_2X;
static constexpr uint32_t samplePosXi[2] = { 0x80 , 0x80 };
static constexpr uint32_t samplePosYi[2] = { 0x80 , 0x80 };
static constexpr float samplePosX[2] = { 0.5f, 0.5f };
static constexpr float samplePosY[2] = { 0.5f, 0.5f };
};
template<>
@ -146,13 +150,13 @@ struct MultisampleTraits<SWR_MULTISAMPLE_4X, false>
return mask;
}
static const uint32_t samplePosXi[4];
static const uint32_t samplePosYi[4];
static const float samplePosX[4];
static const float samplePosY[4];
static const uint32_t numSamples = 4;
static const SWR_MULTISAMPLE_COUNT sampleCount = SWR_MULTISAMPLE_4X;
static const uint32_t numCoverageSamples = 4;
static const SWR_MULTISAMPLE_COUNT sampleCount = SWR_MULTISAMPLE_4X;
static constexpr uint32_t samplePosXi[4] = { 0x60, 0xE0, 0x20, 0xA0 };
static constexpr uint32_t samplePosYi[4] = { 0x20, 0x60, 0xA0, 0xE0 };
static constexpr float samplePosX[4] = { 0.375f, 0.875f, 0.125f, 0.625f };
static constexpr float samplePosY[4] = { 0.125f, 0.375f, 0.625f, 0.875f };
};
template<>
@ -167,10 +171,12 @@ struct MultisampleTraits<SWR_MULTISAMPLE_4X, true>
}
static const uint32_t numSamples = 4;
static const float samplePosX[4];
static const float samplePosY[4];
static const SWR_MULTISAMPLE_COUNT sampleCount = SWR_MULTISAMPLE_4X;
static const uint32_t numCoverageSamples = 1;
static const SWR_MULTISAMPLE_COUNT sampleCount = SWR_MULTISAMPLE_4X;
static constexpr uint32_t samplePosXi[4] = { 0x80, 0x80, 0x80, 0x80 };
static constexpr uint32_t samplePosYi[4] = { 0x80, 0x80, 0x80, 0x80 };
static constexpr float samplePosX[4] = { 0.5f, 0.5f, 0.5f, 0.5f };
static constexpr float samplePosY[4] = { 0.5f, 0.5f, 0.5f, 0.5f };
};
template<>
@ -184,13 +190,13 @@ struct MultisampleTraits<SWR_MULTISAMPLE_8X, false>
return mask;
}
static const uint32_t samplePosXi[8];
static const uint32_t samplePosYi[8];
static const float samplePosX[8];
static const float samplePosY[8];
static const uint32_t numSamples = 8;
static const SWR_MULTISAMPLE_COUNT sampleCount = SWR_MULTISAMPLE_8X;
static const uint32_t numCoverageSamples = 8;
static const SWR_MULTISAMPLE_COUNT sampleCount = SWR_MULTISAMPLE_8X;
static constexpr uint32_t samplePosXi[8] = { 0x90, 0x70, 0xD0, 0x50, 0x30, 0x10, 0xB0, 0xF0 };
static constexpr uint32_t samplePosYi[8] = { 0x50, 0xB0, 0x90, 0x30, 0xD0, 0x70, 0xF0, 0x10 };
static constexpr float samplePosX[8] = { 0.5625f, 0.4375f, 0.8125f, 0.3125f, 0.1875f, 0.0625f, 0.6875f, 0.9375f };
static constexpr float samplePosY[8] = { 0.3125f, 0.6875f, 0.5625f, 0.1875f, 0.8125f, 0.4375f, 0.9375f, 0.0625f };
};
template<>
@ -204,10 +210,12 @@ struct MultisampleTraits<SWR_MULTISAMPLE_8X, true>
return mask;
}
static const uint32_t numSamples = 8;
static const float samplePosX[8];
static const float samplePosY[8];
static const SWR_MULTISAMPLE_COUNT sampleCount = SWR_MULTISAMPLE_8X;
static const uint32_t numCoverageSamples = 1;
static const SWR_MULTISAMPLE_COUNT sampleCount = SWR_MULTISAMPLE_8X;
static constexpr uint32_t samplePosXi[8] = { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 };
static constexpr uint32_t samplePosYi[8] = { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 };
static constexpr float samplePosX[8] = { 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f };
static constexpr float samplePosY[8] = { 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f };
};
template<>
@ -221,13 +229,13 @@ struct MultisampleTraits<SWR_MULTISAMPLE_16X, false>
return mask;
}
static const uint32_t samplePosXi[16];
static const uint32_t samplePosYi[16];
static const float samplePosX[16];
static const float samplePosY[16];
static const uint32_t numSamples = 16;
static const SWR_MULTISAMPLE_COUNT sampleCount = SWR_MULTISAMPLE_16X;
static const uint32_t numCoverageSamples = 16;
static const SWR_MULTISAMPLE_COUNT sampleCount = SWR_MULTISAMPLE_16X;
static constexpr uint32_t samplePosXi[16] = { 0x90, 0x70, 0x50, 0xC0, 0x30, 0xA0, 0xD0, 0xB0, 0x60, 0x80, 0x40, 0x20, 0x00, 0xF0, 0xE0, 0x10 };
static constexpr uint32_t samplePosYi[16] = { 0x90, 0x50, 0xA0, 0x70, 0x60, 0xD0, 0xB0, 0x30, 0xE0, 0x10, 0x20, 0xC0, 0x80, 0x40, 0xF0, 0x00 };
static constexpr float samplePosX[16] = { 0.5625f, 0.4375f, 0.3125f, 0.7500f, 0.1875f, 0.6250f, 0.8125f, 0.6875f, 0.3750f, 0.5000f, 0.2500f, 0.1250f, 0.0000f, 0.9375f, 0.8750f, 0.0625f };
static constexpr float samplePosY[16] = { 0.5625f, 0.3125f, 0.6250f, 0.4375f, 0.3750f, 0.8125f, 0.6875f, 0.1875f, 0.8750f, 0.0625f, 0.1250f, 0.7500f, 0.5000f, 0.2500f, 0.9375f, 0.0000f };
};
template<>
@ -241,10 +249,12 @@ struct MultisampleTraits<SWR_MULTISAMPLE_16X, true>
return mask;
}
static const uint32_t numSamples = 16;
static const float samplePosX[16];
static const float samplePosY[16];
static const SWR_MULTISAMPLE_COUNT sampleCount = SWR_MULTISAMPLE_16X;
static const uint32_t numCoverageSamples = 1;
static const SWR_MULTISAMPLE_COUNT sampleCount = SWR_MULTISAMPLE_16X;
static constexpr uint32_t samplePosXi[16] = { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 };
static constexpr uint32_t samplePosYi[16] = { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 };
static constexpr float samplePosX[16] = { 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f };
static constexpr float samplePosY[16] = { 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f };
};
INLINE
@ -255,8 +265,8 @@ bool isNonStandardPattern(const SWR_MULTISAMPLE_COUNT sampleCount, const SWR_MUL
switch(sampleCount)
{
case SWR_MULTISAMPLE_1X:
standardPosX = &MultisampleTraits<SWR_MULTISAMPLE_1X>::samplePosXi;
standardPosY = &MultisampleTraits<SWR_MULTISAMPLE_1X>::samplePosYi;
standardPosX = MultisampleTraits<SWR_MULTISAMPLE_1X>::samplePosXi;
standardPosY = MultisampleTraits<SWR_MULTISAMPLE_1X>::samplePosYi;
break;
case SWR_MULTISAMPLE_2X:
standardPosX = MultisampleTraits<SWR_MULTISAMPLE_2X>::samplePosXi;