summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAnuj Phogat <[email protected]>2016-08-08 14:53:48 -0700
committerAnuj Phogat <[email protected]>2016-08-09 14:45:25 -0700
commit2ef5063ad79313d4f81c559e1493cd7e3daf3b6d (patch)
tree0894878de6431537c252ac66b8148b72272702b8 /src
parentdc49dd7f10665bfb51804730d8750b3f381ef4a6 (diff)
anv/pipeline: Add sample locations for gen7-7.5
V1: Add multisample positions (Nanley) V2: Fix 8x sample positions to match OpenGL (Anuj) V3: Vulkan has standard sample locations. They need not be same as in OpenGL. (Anuj) Signed-off-by: Anuj Phogat <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/intel/vulkan/genX_pipeline_util.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/intel/vulkan/genX_pipeline_util.h b/src/intel/vulkan/genX_pipeline_util.h
index d9d8ca4e25d..64b89cd477e 100644
--- a/src/intel/vulkan/genX_pipeline_util.h
+++ b/src/intel/vulkan/genX_pipeline_util.h
@@ -475,6 +475,7 @@ emit_ms_state(struct anv_pipeline *pipeline,
anv_batch_emit(&pipeline->batch, GENX(3DSTATE_MULTISAMPLE), ms) {
ms.NumberofMultisamples = log2_samples;
+#if GEN_GEN >= 8
/* The PRM says that this bit is valid only for DX9:
*
* SW can choose to set this bit only for DX9 API. DX10/OGL API's
@@ -482,6 +483,52 @@ emit_ms_state(struct anv_pipeline *pipeline,
*/
ms.PixelPositionOffsetEnable = false;
ms.PixelLocation = CENTER;
+#else
+ ms.PixelLocation = PIXLOC_CENTER;
+
+ switch (samples) {
+ case 1:
+ ms.Sample0XOffset = 0.5;
+ ms.Sample0YOffset = 0.5;
+ break;
+ case 2:
+ ms.Sample0XOffset = 0.25;
+ ms.Sample0YOffset = 0.25;
+ ms.Sample1XOffset = 0.75;
+ ms.Sample1YOffset = 0.75;
+ break;
+ case 4:
+ ms.Sample0XOffset = 0.375;
+ ms.Sample0YOffset = 0.125;
+ ms.Sample1XOffset = 0.875;
+ ms.Sample1YOffset = 0.375;
+ ms.Sample2XOffset = 0.125;
+ ms.Sample2YOffset = 0.625;
+ ms.Sample3XOffset = 0.625;
+ ms.Sample3YOffset = 0.875;
+ break;
+ case 8:
+ ms.Sample0XOffset = 0.5625;
+ ms.Sample0YOffset = 0.3125;
+ ms.Sample1XOffset = 0.4375;
+ ms.Sample1YOffset = 0.6875;
+ ms.Sample2XOffset = 0.8125;
+ ms.Sample2YOffset = 0.5625;
+ ms.Sample3XOffset = 0.3125;
+ ms.Sample3YOffset = 0.1875;
+ ms.Sample4XOffset = 0.1875;
+ ms.Sample4YOffset = 0.8125;
+ ms.Sample5XOffset = 0.0625;
+ ms.Sample5YOffset = 0.4375;
+ ms.Sample6XOffset = 0.6875;
+ ms.Sample6YOffset = 0.9375;
+ ms.Sample7XOffset = 0.9375;
+ ms.Sample7YOffset = 0.0625;
+ break;
+ default:
+ break;
+ }
+#endif
}
anv_batch_emit(&pipeline->batch, GENX(3DSTATE_SAMPLE_MASK), sm) {