compiler: add VS meta shaders for copying images to memories
Because of the 2D nature of the images, INTEL_CMD_META_VS_POINTS needs to draw
(width * height) points. The meta shaders generated here are suboptimal. The
meta compiler uses fs_generator and align1 mode internally. We will need to
support vec4_generator to generate better shaders.
diff --git a/icd/intel/cmd_pipeline.c b/icd/intel/cmd_pipeline.c
index a4a1f9d..c951334 100644
--- a/icd/intel/cmd_pipeline.c
+++ b/icd/intel/cmd_pipeline.c
@@ -2357,6 +2357,17 @@
consts[1] = meta->src.x;
const_count = 2;
break;
+ case INTEL_DEV_META_VS_COPY_R8_TO_MEM:
+ case INTEL_DEV_META_VS_COPY_R16_TO_MEM:
+ case INTEL_DEV_META_VS_COPY_R32_TO_MEM:
+ case INTEL_DEV_META_VS_COPY_R32G32_TO_MEM:
+ case INTEL_DEV_META_VS_COPY_R32G32B32A32_TO_MEM:
+ consts[0] = meta->src.x;
+ consts[1] = meta->src.y;
+ consts[2] = meta->width;
+ consts[3] = meta->dst.x;
+ const_count = 4;
+ break;
default:
assert(!"unknown meta shader id");
const_count = 0;
@@ -3073,7 +3084,7 @@
if (meta->mode == INTEL_CMD_META_VS_POINTS) {
gen7_3DPRIMITIVE(cmd, GEN6_3DPRIM_POINTLIST, false,
- meta->width, 0, 1, 0, 0);
+ meta->width * meta->height, 0, 1, 0, 0);
} else {
gen7_3DPRIMITIVE(cmd, GEN6_3DPRIM_RECTLIST, false, 3, 0, 1, 0, 0);
}
@@ -3089,7 +3100,7 @@
if (meta->mode == INTEL_CMD_META_VS_POINTS) {
gen6_3DPRIMITIVE(cmd, GEN6_3DPRIM_POINTLIST, false,
- meta->width, 0, 1, 0, 0);
+ meta->width * meta->height, 0, 1, 0, 0);
} else {
gen6_3DPRIMITIVE(cmd, GEN6_3DPRIM_RECTLIST, false, 3, 0, 1, 0, 0);
}